Brevet FR2757973A1 — publié le 19980703

Processeur de traitement matriciel L'invention a pour objet une processeur de traitement matriciel. Ce type de processeur est utilisable pour effectuer des calculs dans des applications faisant appel à des traitements matriciels notamment le traitement d'image. Le traitement d'image numérique utilise de nombreuses opérations de calcul basées sur des matrices. Classiquement, des filtres matriciels sont utilisés pour filtrer les images (suppression de bruit ou ajout de contraste). De plus, la transmission d'images numériques nécessite une compression des images. De nombreux codages existent à l'heure actuelle, par exemple MPEG pour la télévision ou H261 et H263 pour la vidéophonie. Tous ces codes de compression d'images ont la particularité de nécessiter des calculs de type matriciel très nombreux. A titre d'exemple, la norme H263 réalise entre autre les opérations suivantes: découpage en blocs de l'image, prédiction du mouvement de chaque bloc par comparaison avec les blocs voisins, réalisation de transformées cosinus sur les différents blocs, compactage à l'aide d'un codage de compression de données, décodage et filtrage de l'image qui vient d'être coder pour pouvoir coder l'image suivante. Plusieurs dizaines de millions d'instructions de calcul sont nécessaires à chaque seconde uniquement pour le codage de l'image. Dans le cas de codage de type MPEG, le codaae utilise des techniques équivalentes avec un nombre d'images plus important et d'une définition supérieure entraînant un nombre d'opérations élémentaires d'autant plus important. Classiquement, on utilise des dispositifs multiprocesseurs disposés en lignes ou en matrices et contrôlés par un processeur supplémentaire. Ces processeurs sont commandés soit de manière individuelle soit de manière groupée. Les commandes individuelles font en fait effectuer beaucoup plus d'opérations au système que ce qui est strictement nécessaire à cause d'une gestion de communication des processeurs qui est très importante, d'où un surdimentionnement du système. Les commandes groupées nécessitent une gestion de protocole moindre et donc des systèmes un peu plus réduits mais tous les processeurs font exactement la même chose ce qui entraîne des imperfections lorsque l'on effectue des calculs entre autre sur les bords d'une image. L'invention propose de réaliser un processeur dédié au calcul matriciel qui utilisera une pluralité d'unités de calcul utilisant des instructions dont une partie sera commune et une autre partie sera dédiée à chaque unités de calcul. Préférentiellement, les unités de calcul seront réalisées afin de réaliser des opérations élémentaires utilisées dans le traitement d'image afin de réaliser un processeur particulièrement adapté au traitement des images. l'invention a pour objet un processeur de calcul matriciel comportant une unité de contrôle et une mémoire de donnée, caractérisé en ce qu'il comporte une pluralité d'unités de calcul utilisant des données présentes dans la mémoire de donnée, ladite pluralité d'unités de calcul étant contrôlée par l'unité de contrôle par l'intermédiaire d'un bus de commande composé: d'un premier groupe de fils relié à la pluralité d'unités de calcul afin de convoyer une instruction commune à la pluralité d'unités de calcul; et d'une pluralité de deuxièmes groupes d'au moins un fil, chacun des deuxièmes groupes étant connecté respectivement à l'une des unités de calcul de la pluralité d'unités de calcul, chaque deuxième groupe convoyant un complément d'instruction spécifique à chaque unité de calcul de la pluralité d'unités de calcul. Les compléments d'instruction ont pour but de spécifier à certains éléments de chacune des unités de calcul les opérations qui peuvent être différentes d'une unité de calcul à l'autre. Chaque unité de calcul comporte au moins: un accumulateur de n+k bits ayant une entrée et une sortie de n+k bits, ledit accumulateur mémorisant une donnée dans l'unité de calcul; et une unité arithmétique et logique ayant des première et deuxième entrée de n+k bits et une sortie de n+k bits, ladite unité arithmétique et logique pouvant effectuer différentes opérations arithmétiques et/ou logique. Les unités de calcul pourront également comporter d'autre éléments tels que: des décaleurs à gauche et/ou à droite à barillet pouvant décaler des bits d'au plus k-1 bits vers la gauche et/ou la droite et ayant une entrée et une sortie parallèles de n+k bits, une instruction indiquant le décalage à gauche et un complément d'instruction indique le nombre de bit sur lequel s'effectue le décalage;.un multiplexeur pour recevoir un mot provenant d'au moins une unité de calcul voisine et en ce que une instruction indique le chargement; d'une donnée dans l'accumulateur à partir d'une unité de calcul et un complément d'instruction indique depuis quelle unité de calcul doit se faire le chargement. Préférentiellement, la mémoire de données est organisée afin d'avoir m mots de n bits accessibles simultanément, n et m étant deux entiers, et la pluralité d'unités de calcul comporte au plus m unités de calcul. De plus, chaque unité de calcul comporte au moins un mode de chargement d'un mot de la mémoire dans ladite unité de calcul et en ce que un complément d'instruction précise à chaque unité de calcul un mot parmi les m mots de la mémoire à charger dans ladite unité de calcul; et/ou éventuellement chaque unité de calcul comporte au moins un mode de chargement d'un mot dans la mémoire et en ce que un complément d'instruction indique à chaque unité de calcul un mot parmi les m mots de la mémoire. L'invention sera mieux comprise et d'autres avantages apparaîtront à la lecture de la description qui va suivre d'un mode de réalisation préféré et non limitatif de l'invention, la description faisant référence aux dessins annexés parmi lesquels: la figure 1 représente schématiquement un processeur de calcul matriciel selon l'invention comportant plusieurs unités de calcul, la figure 2 représente la trame des commandes envoyées aux unités de calcul, et la figure 3 représente un mode préféré de réalisation d'une unité de calcul. Le schéma de la figure 1 représente un mode préféré de réalisation d'un processeur de calcul matriciel 1 selon l'invention. Le processeur de calcul matriciel 1 comporte une mémoire de programme 2, un micro-contrôleur 3, une mémoire de données 4, une interface d'entrées/sorties de données 5, et une pluralité d'unités de calcul 6 à 14. La mémoire de programme 2 contient une ou plusieurs séquence de traitement à effectuer sur les données de la mémoire de données 4. Cette mémoire est, par exemple, de type non-volatile éventuellement programmable plusieurs fois. Le contenu de la mémoire de programme 2 contient par exemple le séquencement d'un algorithme de traitement d'image. La mémoire de programme 2 va contenir des instructions de trois types instructions d'échange de données entre la mémoire de données 4 et l'extérieur du processeur 1, instructions de gestion de l'algorithme de traitement matriciel, et instructions de génération de commandes des unités de calcul 6 à 14. Le micro-contrôleur 3 est connectée à la mémoire de programme 2 afin de gérer l'algorithme de traitement matriciel et les différents éléments du processeur 1 afin d'exécuter ledit algorithme. Le micro-contrôleur 3 est également connecté à un bus d'entrées/sorties 15 et d'un bus de commande 16. Le bus d'entrées/sorties 15 est connectée à la mémoire de données 4 et à l'interface d'entrées/sorties 5. Par l'intermédiaire du bus d'entrées/sorties 15, le micro-contrôleur 3 commande et contrôle l'entrée et la sortie des données de la mémoire de données 4 aussi bien avec l'extérieur du processeur 1 via l'interface d'entrées/sorties de données 5 qu'avec les unités de calcul 6 à 14. Le bus de commande 16 comporte dans notre exemple 32 fils dont 14 établissent une connexion du micro-contrôleur 3 avec toutes les unités de calcul 6 à 14; les 18 autres fils du bus de commande correspondent à neuf paires de fils établissant des connexions entre le micro-contrôleur 3 et respectivement chacune des neuf unités de calcul 6 à 14. Chacune des unités de calcul 6 à 14 est connectée au micro-contrôleur 3 par l'intermédiaire de 16 fils, dans notre exemple, répartis en deux groupes: un premier groupe correspondant au transport d'une instruction commune à toutes les unités de calcul 6 à 14, un deuxième groupe correspondant au transport d'un complément d'instruction propre à chacune des unités de calcul 6 à 14. Les unités de calcul 6 à 14 sont également connectées à la mémoire de données 4 par l'intermédiaire d'un bus de données 17. Préférentiellement, le bus de données 17 et la mémoire de données 4 permettent un accès simultané à autant de mots qu'il y a d'unités de calcul 6 à 14. De plus, dans notre exemple, tous les mots de la mémoire de données 4 sont accessibles à toutes les unités de calcul 6 à 14. Le bus de commande 16 transporte les commandes destinées aux unités de calculs 6 à 14. Dans notre exemple, le bus comporte 32 fils transportant chacun un bit de commande. Dans l'exemple préféré de réalisation représenté sur la figure 1, il est représenté neuf unités de calcul 6 à 14. De plus la mémoire de données 4 est organisée en neuf colonnes de mots. Ces choix ont étés fait afin de réaliser au mieux un codage d'image découpée en bloc de 8x8 bits et qui a besoin d'utiliser des points fictifs situés entre les points réels (utilisation d'un filtrage dit en demi-pixels dans le codage H263). Il est tout à fait possible de réaliser la même chose avec une mémoire de données 4 organisée en neuf colonnes de mots avec seulement huit unités de calcul 6 à 13, mais cela entraîne un ralentissement dans le traitement. L'homme du métier peut réaliser de nombreux processeurs de traitement matriciel avec un nombre d'unités de calcul 6 à 14 différent de l'invention, l'important étant d'utiliser au moins autant d'unités de calcul 6 à 14 que la matrice à traiter comporte de lignes et/ou de colonnes afin d'optimiser les temps de calcul. Pour diminuer les temps d'accès à la mémoire de données 4 et limiter les conflits d'accès en mémoire de données 4 entre l'interface d'entrées/sorties 5 et les unités de calcul 6 à 14, il est préférable que la gestion des accès mémoires soit gérée intégralement par le microcontrôleur 3. De plus, cela permet de décharger les unités de calcul des accès mémoire. Une telle solution n'est possible que pour du traitement matriciel, réduisant considérablement les performances du processeur pour des traitements non-matriciels. La figure 2 représente la structure de commande 18 envoyée par le micro-contrôleur aux unités de calcul 6 à 14. La structure de commande 18 comporte un premier groupe de bit 19 correspondant à une instruction globale à destination de toutes les unités de calcul 6 à 14 et des deuxièmes groupes de bit 20 correspondant à un complément d'instruction à destination de respectivement chacune des unités de calcul 6 à 14. Bien que disposant de 14 bits d'instructions, il n'est pas question d'utiliser 214 instructions. Dans notre exemple, l'instruction 19 correspond à une microcommande, c'est à dire que chaque bit active directement un ou plusieurs éléments internes de chacune des unités de calcul 6 à 14. Les compléments d'instruction 20 s'adresseront par contre à différents éléments de chacune des unités de calcul 6 à 14 mais de manière conditionnelle en fonction de l'instruction 19. La transformation de huit en douze bit se fait par l'ajout de "zéro" en bits de poids fort. La transformation de douze à huit bits se fait par troncature des bits de poids fort. L'utilisation d'unités de calcul de douze bits permet une meilleur précision pour traiter des entier de huit bits et évite de perdre du temps pour certaines opérations arithmétiques entraînant des retenues. La figure 3 représente un exemple préféré de réalisation d'une unité de calcul 10, toutes les unités de calcul 6 à 14 étant identiques. Dans notre exemple, les mots stockés en mémoire de données 4 sont des mots de huit bits et les mots traités dans les unités de calcul 6 à 14 sont des mots de douze bits. Un premier multiplexeur 21 possède autant d'entrées de mots que la mémoire de données 4 peut fournir de mots et une sortie de mot. Toutes les entrées de mot sont connectées au bus de données 17. Ce premier multiplexeur 21 sert à choisir la donnée de la mémoire de données à traiter dans l'unité de calcul 10. Un deuxième multiplexeur 22 possède quatre entrées de mot et une sortie de mot. Une première entrée de mot est connectée à une première borne de communication 23. Une deuxième entrée de mot est connectée à la sortie du premier multiplexeur 21. Une troisième entrée de mot est connectée à une deuxième borne de communication 24. les première et deuxième bornes 23 et 24 de communication sont en fait des entrées de mots provenant d'autres unités de calcul par exemple des unités voisines 9 et 11. Un décaleur à gauche 25, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie du deuxième multiplexeur 22. Le décaleur à gauche 25 peut, dans notre exemple, effectuer des décalages de 0, 1, 2 ou 3 bits vers la gauche ce qui correspond à des multiplications par 1, 2, 4 ou 8. Une unité arithmétique et logique 26, ayant des première et deuxième entrées de mot et une sortie de mot, a sa première entrée connectée à la sortie du décaleur à gauche 25. L'unité arithmétique et logique 26 est de type classique assez simple; les opérations suivantes étant disponibles: addition, soustraction, comparaison, transparence, et différentes fonctions logiques élémentaires. Un décaleur à droite 27, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie de l'unité arithmétique et logique 26. Le décaleur à droite peut, dans notre exemple, effectuer des décalages de 0, 1, 2 ou 3 bits vers la droite, ce qui correspond à des divisions entières par 1, 2, 4 ou 8. Un démultiplexeur 28, ayant une entrée de mot et autant de sorties de mot que la mémoire de donnée 4 peut recevoir de mots, a son entrée connectée à la sortie du décaleur à droite 27. Toutes les sorties de mots du démultiplexeur 28 sont connectées aux bus de données 17. Ce démultiplexeur 28 permet de sauvegarder la donnée présente dans l'unité de calcul 10 à n'importe quel emplacement de la mémoire de données 4. De plus, le démultiplexeur 28 à la possibilité d'avoir toutes ses sorties simultanément en haute impédance. Un accumulateur 29, ayant une entrée de mot et une sortie de mot, a son entrée connectée à la sortie du décaleur à droite 27, et a sa sortie connectée d'une part à la quatrième entrée du deuxième multiplexeur 22 et d'autre part à la deuxième entrée de l'unité arithmétique et logique 26. L'accumulateur 29 est un registre parallèle destiné à mémoriser un mot dans l'unité de calcul 10. Dans notre exemple, c'est le seul élément de l'unité de calcul 10 fonctionnant de manière synchrone, c'est à dire à l'aide d'un signal d'horloge. Des ports de sortie 30 et 31 sont connectés à la sortie de l'accumulateur 29. Ces ports de sortie 30 et 31 servent à envoyer des données à des unités de calcul 9 et 11 voisines. L'un des ports de sortie 30 est connecté à l'une des borne d'une unité de calcul 9, et l'autre des ports de sortie 31 est connecté à l'une des bornes d'une unité de calcul 11 différente. De nombreuses variantes sont possible comme peut s'en apercevoir l'homme du métier. Les premier et deuxième multiplexeurs 21 et 22 peuvent être réuni dans un même multiplexeur. Le premier multiplexeur 21 peut avoir ses entrées connectées à seulement une partie du bus de données 17 afin de ne recevoir que quelques mots et non la totalité des mots disponibles en sortie de la mémoire de données 4. Le deuxième multiplexeur 22 peut être placé à différent endroit, par exemple à l'entrée de l'accumulateur 29 ou après le décaleur à gauche 25. Le démultiplexeur 28 n'est pas indispensable, il permet seulement de faire gagner du temps lors de déplacement de données dans la mémoire de données 4. Toutefois, il est nécessaire de remplacer ce démultiplexeur 28 par un buffer trois états si on le supprime afin d'éviter les conflits sur le bus de données 4. Le décaleur à gauche 25 et le décaleur à droite 27 peuvent également être placé n'importe où. Néanmoins, il est préférable que le décaleur à gauche 25 soit situé sur le chemin de données entre le premier multiplexeur 21 et l'unité arithmétique et logique 26; et il est préférable que le décaleur à droite soit situé sur le chemin de données entre l'unité arithmétique et logique 26 et le démultiplexeur 28. Des variantes sont envisageable pour l'accumulateur 29 qui peut se positionner en sortie de l'unité arithmétique et logique 26 ou en sortie du décaleur à droite 27. Il est également possible de rajouter un deuxième accumulateur dans l'unité de calcul 10 mais cela risque de ralentir le flot de données. A titre d'exemple, il va être détailler une structure d'instructions afin que l'homme du métier puisse mieux comprendre l'interaction entre les éléments de chacune des unités de calcul 6 à 14 et les instructions 19 munies de compléments d'instruction 20. Dans notre exemple, les instructions sont sur 14 bits et les compléments d'instruction sont sur 2 bits pour chaque unité de calcul. Une décomposition des instructions est la suivante: - un premier bit BO indique s'il s'agit d'une instruction, c'est à dire que si ce premier bit DO est dans un premier état, alors les unités de calcul 6 à 14 ne tiennent pas compte de l'instruction et ne font rien, si ledit premier bit B0 est dans un deuxième état, alors l'instruction est prise en compte par toutes les unités de calcul 6 à 14; - un deuxième bit B1 s'adresse au deuxième multiplexeur 22, lorsque ce deuxième bit B1 est dans un premier état alors le deuxième multiplexeur 22 établit une connexion entre sa sortie et sa deuxième entrée (connectée à la sortie du premier multiplexeur 21, lorsque ce deuxième bit B1 est dans un deuxième état, alors le choix de l'entrée à connecter avec la sortie est déterminé par les bits constituant le complément d'instruction dédié à chaque unité de calcul; - un troisième bit B2 s'adresse au décaleur à gauche 25, lorsque ce troisième bit B2 est dans un premier état alors le décaleur à gauche 25 n'effectue pas de décalage, lorsque ce troisième bit B2 est dans un deuxième état, alors le décaleur à gauche 25 effectue un décalage à gauche de 0 à 3 bits suivant l'état des bits constituant le complément d'instruction dédié à chaque unité de calcul; un quatrième bit B3 s'adresse au décaleur à droite 27, lorsque ce quatrième bit B3 est dans un premier état alors le décaleur à droite 27 n'effectue pas de décalage, lorsque ce quatrième bit B3 est dans un deuxième état, alors le décaleur à droite 27 effectue un décalage à droite de 0 à 3 bits suivant l'état des bits constituant le complément d'instruction dédié à chaque unité de calcul; - des cinquième à huitième bits B4 à B7 s'adressent à l'unité arithmétique et logique 26, ces cinquième à huitième bits B4 à B7 permettent de faire réaliser 16 opérations différentes à l'unité arithmétique et logique 26; la donnée A étant présente à la première entrée et la donnée B étant présente à la deuxième entrée, la sortie fournit suivant l'état des cinquième à huitième bits B4 à B7 par exemple les résultats suivant: A, B, A+B, A-B, A ET B, A OU B, A OU-exclusif B, NON A, NON B, etc...; de nombreuses opérations sont connues de l'homme du métier; - des neuvième à onzième bits B8 à B10 s'adressent au premier multiplexeur 21, ces neuvième à onzième bits B8 à B10 permettent de réaliser plusieurs modes de chargement de données dans chacune des unités de calcul 6 à 14: chargement normal, chargement de "zéro", chargement de "n", chargement croisé, chargement à droite, chargement à gauche, chargement à droite avec complément, chargement à gauche avec complément; - des douzième à quatorzième bits Bll à B13 s adressent au démultiplexeur 28, ces douzième à quatorzième bits Dli à B13 permettent de réaliser plusieurs modes de déchargement de données dans la mémoire de données 4: déchargement normal, pas de déchargement, déchargement croisé, déchargement à droite, déchargement à gauche, déchargement à droite avec complément, déchargement à gauche avec complément. L'utilisation de plusieurs modes de chargement et déchargement de données sert essentiellement dans le codage d'image mais peut servir dans d'autre applications. Les explications qui suivent permettront de voir l'utilité des modes de chargement et déchargement. Le chargement normal consiste à charger les données en respectant un ordre matriciel d'organisation de la mémoire de données 4. Chaque unité de calcul 6 à 14 reçoit un mot de telle manière que la première unité de calcul 6 reçoit un mot de la première colonne de mots de la mémoire 4 et la dernière unité de calcul 14 reçoit un mot de la neuvième colonne de mots de la mémoire 4. Le chargement de "zéro" consiste à charger des mots dont tous les bits sont mis à "zéro" dans toutes les unités de calcul 6 à 14. Le chargement de "un" consiste à charger des mots dont tous les bits sont mis à "un" dans toutes les unités de calcul 6 à 14. Ces deux modes peuvent servir à initialiser les unités de calcul 6 à 14 avec des données fixes notamment pour des boucles itératives. Le chargement croisé consiste à charger huit octets de la mémoire de manière croisée. C'est à dire que des données d'une matrice traiter dans le processeur de calcul matriciel sont échangées par demi-bloc ce qui est particulièrement utile pour des calculs de vecteurs de mouvement en codage d'image. Les première à quatrième unités de calcul 6 à 9 reçoivent respectivement les mots des cinquième à huitième colonnes de la mémoire 4. Les cinquième à huitième unités de calcul 10 à 13 reçoivent respectivement les mots des première à quatrième colonnes de la mémoire 4. La neuvième unité de calcul 14 ne charge pas de mot. Les chargements à droite et à gauche servent à effectuer des calculs en bordure d'image par extrapolation de l'image. Dans les modes de chargements sans complément la données de la colonne de "gauche" ou de "droite" (par référence à la gauche ou à la droite de l'image) est chargée dans les deux premières ou deux dernières unités de calcul 6 et 7, ou 13 et 14. Les autres unités de calcul 8 à 14, ou 6 à 12, chargent une données décalée d'une colonne à "gauche" ou à "droite". Dans les modes de chargement avec complément, le complément de chacune des unités de calcul 6 à 14 indique que ladite des unités de calcul 6 à 14 doit charger le contenu d'une colonne décalée de 0 à 3 "pixel" vers la gauche ou la droite. Le déchargement normal consiste à décharger les données en respectant un ordre matriciel d'organisation dans la mémoire de données 4. Chaque unité de calcul 6 à 14 fournit un mot de telle manière que la première unité de calcul 6 fournit un mot à la première colonne de mots de la mémoire 4 et la dernière unité de calcul 14 fournit un mot de la neuvième colonne de mots de la mémoire 4. Le mode "pas de déchargement" positionne les sorties du démultiplexeur 28 de chacune des unités de calcul 6 à 14 en haute impédance. Le déchargement croisé consiste à décharger huit octets dans la mémoire de manière croisée. C'est à dire que des données traitées dans le processeur 1 de calcul matriciel sont inversées par demi-bloc après calcul dans les unités de calcul 6 à 14. Les première à quatrième unités de calcul 6 à 9 fournissent respectivement des mots aux cinquième à huitième colonnes de la mémoire 4. Les cinquième à huitième unités de calcul 10 à 13 fournissent respectivement des mots aux première à quatrième colonnes de la mémoire 4. La neuvième unité de calcul 14 ne décharge pas de mot, les sorties du démultiplexeur 28 de la neuvième unité de calcul 14 étant mis en haute impédance. Les déchargements à droite et à gauche servent à décharger le contenu des unités de calcul 6 à 14 après avoir traité les données. Dans les modes de déchargements sans complément la données de chacune des unités de calcul 6 à 14 est déchargée dans une colonne de "gauche" ou de "droite", l'unité de calcul 6 ou 14 située à gauche ou à droite ayant les sorties de son démultiplexeur 28 en haute impédance. Dans les modes de chargement avec complément, le complément de chacune des unités de calcul 6 à 14 indique que ladite des unités de calcul 6 à 14 doit décharger son contenu dans une colonne décalée de 1 à 3 "pixel" vers la gauche ou la droite ou ne pas effectuer de déchargement. Tous les mode de chargement et déchargement ne sont pas essentiels. En effet, pour simplifier le processeur de calcul matriciel, il est possible de réduire les mode de chargement aux chargement sans complément d'instruction, et de n'utiliser qu'un mode de déchargement sans complément d'instruction. Toutes les combinaisons de bits d'instruction DO à B13 ne sont pas utilisables simultanément. En effet, les compléments d'instruction ne doivent pas être utilisés simultanément pour deux fonctions différentes sauf cas particulier. Afin de gagner du temps de calcul, les instruction de calcul sont de préférence combinées avec une instruction de chargement. La combinaison des bits d'instruction et des bits de complément d'instruction peut offrir de très nombreuses possibilités. A titre d'exemple, on peut citer: chargement dans les accumulateurs de toutes les unités de calcul 6 à 14 en utilisant un mode quelconque de chargement des données, - chargement selon un mode fixe avec décalage à droite ou gauche, - chargement avec réalisation d'une opération dans l'unité arithmétique et logique (UAL) 26 et le contenu d'une donnée présente dans l'accumulateur 29, - chargement avec décalage à droite ou à gauche, - chargement, décalage à gauche, opération dans l'UAL 26, décalage à droite et stockage dans l'accumulateur 29, - opération dans l'UAL avec une donnée présente dans l'accumulateur d'une unité de calcul voisine puis déchargement dans la mémoire, etc... La liste des possibilités est très importante, l'homme du métier pourra aisément la compléter avec des instructions correspondant à ses besoins. Dans les applications de traitement d'image l'utilisation du complément d'instruction va permettre d'utiliser des coefficient de pondération différents sur chaque unité de calcul par l'intermédiaire des décalage à gauche ou à droite. Les échanges de données entre les unités de calcul 6 à 14 pourront différer entre deux unités de calcul. Il est également possible de charger les données avec la première unité de calcul 6 et de décaler les données après calcul dans les unités de calcul 7 à 14 suivant créant ainsi un processus itératif de type pipeline. L'homme du métier peut très bien utiliser des instructions comportant un nombre de bit plus ou moins important, un nombre de bits de données différents, une unité arithmétique et logique 26 plus complète, un nombre de bit de complément d'instruction inférieur ou supérieur. De plus, suivant ses besoins, l'homme du métier pourra supprimer des éléments fonctionnels de l'unité de calcul 10 tel que: les décaleurs à gauche et/ou à droite 25 et 27, les premier et/ou deuxième multiplexeurs 21 et 22, ou le démultiplexeur 28. Par ailleurs, d'autres éléments pourront être rajoutés et bénéficiés de complément d'instruction sans sortir du cadre de l'invention. REVENDICATIONS 1. Processeur de calcul matriciel (1) comportant une unité de contrôle (2, 3) et une mémoire de donnée (4), caractérisé en ce qu'il comporte une pluralité d'unités de calcul (6 à 14) utilisant des données présentes dans la mémoire de donnée (4), ladite pluralité d'unités de calcul (6 à 14) étant contrôlée par l'unité de contrôle (2, 3) par l'intermédiaire d'un bus de commande (16) composé: d'un premier groupe de fils relié à la pluralité d'unités de calcul (6 à 14) afin de convoyer une instruction (19) commune à la pluralité d'unités de calcul (6 à 14); et d'une pluralité de deuxièmes groupes d'au moins un fil, chacun des deuxièmes groupes étant connecté respectivement à l'une des unités de calcul de la pluralité d'unités de calcul (6 à 14), chaque deuxième groupe convoyant un complément d'instruction (20) spécifique à chaque unité de calcul de la pluralité d'unités de calcul (6 à 14). 2. Processeur (1) selon la revendication 1, caractérisé en ce que, n et k étant deux entiers, chaque unité de calcul (6 à 14) comporte au moins: - un accumulateur (29) de n+k bits ayant une entrée et une sortie de n+k bits, ledit accumulateur (29) mémorisant une donnée dans l'unité de calcul, et - une unité arithmétique et logique (26) ayant des première et deuxième entrée de n+k bits et une sortie de n+k bits, ladite unité arithmétique et logique (26i pouvant effectuer différentes opérations arithmétiques et/ou logique. 3. Processeur (1) selon l'une des revendications 1 ou 2, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un décaleur à gauche (25) à barillet pouvant décaler des bits d'au plus k-l bits vers la gauche et ayant une entrée et une sortie parallèles de n+k bits, et en ce que une instruction (19) indique le décalage à gauche et un complément d'instruction (20) indique le nombre de bit sur lequel s'effectue le décalage. 4. Processeur (1) selon l'une des revendications 1 à 3, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un décaleur à droite (27) à barillet pouvant décaler des bits d'au plus k-l bits vers la droite et ayant une entrée et une sortie parallèles de n+k bits, et en ce que une instruction (19) indique le décalage à droite et un complément d'instruction (20) indique le nombre de bits sur lequel s'effectue le décalage. 5. Processeur (1) selon l'une des revendications 2 à 4, caractérisé en ce que chaque unité de calcul (6 à 14) comporte un multiplexeur (22) pour recevoir un mot provenant d'au moins une unité de calcul voisine et en ce que une instruction (19) indique le chargement d'une donnée dans l'accumulateur (29) à partir d'une unité de calcul et un complément d'instruction (20) indique depuis quelle unité de calcul doit se faire le chargement. 6. Processeur (1) selon l'une des revendications 1 à 5, caractérisé en ce que, n et m étant deux entiers, la mémoire de données (4) est organisée afin d'avoir m mots de n bits accessibles simultanément, et en ce que la pluralité d'unités de calcul (6 à 14) comporte au plus m unités de calcul. 7. Processeur (1) selon la revendication 6, caractérisé en ce que chaque unité de calcul (6 à 14) comporte au moins un mode de chargement d'un mot de la mémoire (4) dans ladite des unités de calcul (6 à 14) et en ce que un complément d'instruction (20) précise à chaque unité de calcul (6 à 14) un mot parmi les m mots de la mémoire (4) à charger dans ladite unité de calcul. 8. Processeur (1) selon l'une des revendications 6 ou 7, caractérisé en ce que chaque unité de calcul (6 à 14) comporte au moins un mode de chargement d'un mot dans la mémoire (4) et en ce que un complément d'instruction (20) indique à chaque unité de calcul (6 à 14) un mot parmi les m mots de la mémoire (4). 9. Utilisation d'un processeur (1) tel que défini dans l'une des revendications 1 à 8 pour du traitement d'images.