FR 2710997 A1 19950414 FR 9311968 A 19931007 La présente invention concerne un calculateur fonctionnel comportant une pluralité de processeurs fonctionnels, identiques, interconnectés, dans lequel des flots de données représentant des informations du type vidéo sont traitées, et/ou mémorisées, ou simplement routées par chacun des processeurs fonctionnels. Le calculateur fonctionnel est une machine généralement utilisée pour le traitement d'images en temps réel, capable de traiter à la volée un flot de données numériques vidéo. Outre son utilisation en tant que machine générale de traitement d'images, un tel calculateur est également destiné à l'émulation d'automates de vision pour la conception de ces automates. Etant donnée la puissance de calcul requise pour le traitement d'images en temps réel (au moins plusieurs dizaines de milliards d'opérations par seconde ), seul un système de type multiprocesseur et massivement parallèle peut espérer l'atteindre. Dans le cas du traitement d'images de bas niveau, les opérations à exécuter sont très régulières et répétitives. I1 y a en général un certain nombre (fixe) d'opérations élémentaires à effectuer pour chaque pixel de l'image. Par exemple une convolution 5 x 5 (utilisée pour calculer un filtre et/ou des dérivées partielles) nécessite 25 multiplications et 24 additions pour chaque pixel de l'image (ainsi qu'un certain nombre de décalages en X ou en Y). Pour paralléliser le traitement, il existe principalement deux options: Le parallélisme de type spatial, ou encore de type SIMD (Single Instruction Multiple Data), qui est le plus largement utilisé. I1 consiste à effectuer à chaque pas de temps une opération identique sur l'ensemble des pixels composant l'image. I1 y a alors un pas de temps par opération impliquée dans le traitement et un opérateur physique par élément d'image, Le parallélisme de type temporel, ou encore de type fonctionnel. I1 consiste à effectuer à chaque pas de temps toutes les opérations en parallèle sur un seul des pixels composant l'image. I1 y a alors un opérateur physique par opération impliquée dans le traitement et un pas de temps par élément d'image. La deuxième option présente deux avantages. Tout d'abord, elle permet d'effectuer les traitements à la volée du capteur (donc nécessairement en temps réel). En effet, si le pas de temps correspond à la période de sortie des données du capteur, chaque fois qu'une donnée sort du capteur, toutes les opérations à effectuer le sont immédiatement et en parallèle (le traitement est toutefois en mode pipeline). Dans le cas du modèle SIMD un traitement comprend trois phases: copie de l'image d'entrée dans la mémoire de la machine SIMD, traitement parallèle avec des lectures/écritures dans cette mémoire, copie de l'image de sortie de la mémoire vers le dispositif de visualisation. Cette approche a l'inconvénient de faire perdre tout le temps des phases 1 et 3, de perdre également du temps pendant les accès mémoire de la phase 2 et de nécessiter une mémoire importante pour les images d'entrée, de sortie et les résultats intermédiaires. Ensuite, elle permet la conception d'automates dérivés de manière efficace et optimale. En effet, il est très simple d'obtenir un graphe minimal d'opérateurs interconnectés par extraction des caractéristiques d'un traitement implémenté sur une machine à parallélisme fonctionnel générale. Une telle optimisation permet un gain en densité d'au moins un ou deux ordres de grandeurs entre une machine générale et un automate dérivé. Aucune réduction similaire n'est possible avec les architectures de type SIMD. Un calculateur fonctionnel répondant à cette définition a déjà été développé sous le nom HECATE (Hote Emulateur pour la Conception d'Automates de Traitement Embarquables) par le Laboratoire Système de Perception de 1'ETCA (Etablissement Technique Central de l'Armement). La machine HECATE traite à la volée un flot vidéo numérique et effectue en parallèle toutes les opérations impliquées dans le traitement à chaque arrivée d'un pixel. Mais cette machine est très hétérogène puisqu'elle est constituée d'un ensemble d'opérateurs, de piles FIFO et de réseaux cross-bars très différents les uns des autres. En outre, le contrôle des flots est centralisé et il doit être explicitement géré par des dispositifs matériels et par le programmeur système à un niveau très élémentaire. Une machine de type calculateur fonctionnel n'ayant pas ces inconvénients est composée de processeurs programmables capables chacun d'implémenter une large gamme d'opérateurs flots de données et notamment tous ceux décrits ci-dessus. Ces processeurs sont interconnectés dans un réseau de topologie régulière (maille cubique dans l'implémentation de l'invention) et incluent un cross-bar interne permettant de placer n'importe quelle entrée ou sortie d'opérateur sur n'importe quelle connexion physique. I1 est donc possible de changer par programmation l'opérateur implémenté sur chaque processeur ainsi que les interconnexions entre opérateurs. La fonction globale de la machine peut être facilement et largement modifiée. Ce type général de machine peut être utilisé pour la validation et la conception automatisée d'automates implémentant une fonction précise. Ceux-ci sont constitués d'opérateurs figés interconnectés. Le but principal de l'invention est donc de réaliser une machine de type calculateur fonctionnel dans laquelle le contrôle des flots de données est entièrement décentralisé. Un autre but de l'invention est de fournir un calculateur fonctionnel du type comportant un réseau de processeurs identiques reliés entre eux par des ports d'entrée/sortie dans lequel les décisions de transfert de données sont prises au niveau de chaque port d'entrée/sortie de manière autonome. L'objet de l'invention est par conséquent un calculateur fonctionnel du type à flots de données pour système de traitement d'images vidéo comprenant un nombre N de processeurs fonctionnels identiques effectuant chacun, pendant un temps de base, un traitement élémentaire sur un flot de données entrantes pour fournir un flot de données sortantes; chacun des processeurs fonctionnels comportant une unité de traitement et étant connecté à une pluralité d'au plus n autres processeurs fonctionnels par n ports d'entrée/sortie, les flots de données entrantes étant emmagasinées à chaque temps de base dans m mémoires tampons d'entrée connectées en entrée à chacun des ports d'entrée/sortie et en sortie à l'unité de traitement, et les flots de données sortantes étant emmagasinées à chaque temps de base dans p mémoires tampons de sortie connectées en entrée à l'unité de traitement et en sortie à chacun des ports d'entrée/sortie, la connexion des mémoires tampons d'entrée et de sortie aux ports d'entrée/sortie s'effectuant par des moyens de commutation commandés par des registres de configuration dont le contenu est programmé de façon statique pendant une suite de temps de base correspondant à un programme d'exécution du calculateur fonctionnel. Pour chaque processeur fonctionnel, chacun des n ports d'entrée/sortie comporte une partie émettrice et une partie réceptrice, la partie émettrice étant connectée à chacune des p mémoires tampons de sortie et la partie réceptrice étant connectée à chacune des m mémoires tampons d'entrée, seulement l'une des parties émettrice et réceptrice étant active pendant chacun des temps de base de la suite de temps de base. La partie émettrice de chacun des n ports d'entrée/sortie comprend une ligne de commande de sortie connectée à la partie réceptrice du port d'entrée/sortie de l'un des n processeurs et la partie réceptrice de chacun des n ports d'entrée/sortie comprend une ligne de commande d'entrée connectée à la partie émettrice du port d'entrée/sortie de l'un de la pluralité d'au plus n processeurs. A chaque temps de base, la partie émettrice de chacun des ports d'entrée/sortie, si elle est active, transmet au moyen de la ligne de commande de sortie un signal SRCREADY indiquant que la partie émettrice est disponible pour transférer un flot de données sortantes, et la partie réceptrice du port d'entrée/sortie de l'un des n processeurs auquel le port d'entrée/sortie est connecté transmet au moyen de la ligne de commande d'entrée un signal DESTREADY indiquant que la partie réceptrice est disponible pour recevoir un flot de données entrantes. A chaque temps de base, la partie émettrice active d'un des ports d'entrée/sortie ne transmet un flot de données sortantes en provenance d'une des p mémoires tampons de sortie vers la partie réceptrice active du port d'entrée/sortie de l'un des n processeurs seulement si sa ligne de commande de sortie transmet le signal SRCREADY et sa ligne de commande d'entrée reçoit le signal DESTREADY; de sorte que le transfert des données de la partie émettrice active d'un des ports d'entrée/sortie vers la partie réceptrice du port d'entrée/sortie de l'un des n processeurs a lieu dès lors que la condition ET entre les signaux SRCREADY et DESTREADY est réalisée dans la partie émettrice, la partie réceptrice étant disponible pour recevoir les données du fait que la même condition est vérifiée simultanément par la partie réceptrice. Les buts, objets et caractéristiques de l'invention apparaîtront mieux à la lecture de la description qui suit faite en référence aux dessins dans lesquels La figure 1 représente schématiquement un système d'acquisition de signaux vidéo incorporant un calculateur fonctionnant selon la présente invention, La figure 2 est une représentation très schématique du calculateur fonctionnel selon la présente invention, La figure 3 est une représentation schématique d'exemples d'opérateurs pouvant être implémentés par chacun des processeurs fonctionnels composant le calculateur fonctionnel, La figure 4 est un schéma synoptique d'un processeur fonctionnel utilisé dans la présente invention. La figure 5 représente schématiquement le cas le plus simple de connexion entre un processeur émetteur et un seul processeur récepteur. La figure 6 représente schématiquement le cas général où un processeur émetteur est connecté à plusieurs processeurs récepteurs, La figure 7 représente schématiquement les connexions entre une pile de sortie et la partie émettrice d'un port d'entrée/sortie d'un processeur d'une part, et la partie réceptrice et une pile d'entrée du port d'entrée/sortie d'un autre processeur, La figure 8 est un bloc-diagramme du dispositif de compactage des signaux pouvant être utilisé entre la partie émettrice d'un port d'entrée/sortie et la partie réceptrice d'un port qui lui est connecté, La figure 9 est un schéma synoptique de la partie de contrôle d'une pile de sortie de processeur fonctionnel, La figure 10 est un bloc-diagramme de la partie émettrice d'un port d'entrée/sortie d'un processeur fonctionnel, La figure 11 est un schéma synoptique de la partie de contrôle et une pile d'entrée de processeur fonctionnel. La figure 12 est un bloc-diagramme de la partie réceptrice d'un port d'entrée/sortie d'un processeur fonctionnel, et La figure 13 est un bloc-diagramme du dispositif de protection destiné à éviter les conflits bidirectionnels, qui est associé à chaque connexion d'entrée/sortie d'un port d'entrée/sortie. Un système d'acquisition et de mise en forme du signal vidéo numérique utilisant un calculateur fonctionnel selon la présente invention est illustré sur la figure 1. Ce système se compose d'un calculateur fonctionnel 10, d'une caméra vidéo noir et blanc 12, de type CCD (dispositif à charges couplées), délivrant par exemple du PAL, d'un générateur de synchronisation 14 permettant l'asservissement de la caméra à l'horloge du calculateur fonctionnel 10, un convertisseur analogique-numérique 16 fournissant des pixels sur 8 bits de manière synchrone avec l'horloge du calculateur fonctionnel, et une unité de contrôle 18 pour valider les pixels dans la partie utile de l'image (suppression du signal pendant le temps de retour ligne et retour trame), et insérer des signaux de début et fin de ligne et de début et fin de trame. En dehors des pixels représentés par des valeurs numériques de 8 bits, il y a deux signaux de contrôle possibles qui constituent soit une parenthèse ouvrante, soit une parenthèse fermante. Les pixels 8 bits et les deux signaux de contrôle sont codés dans un champ de 9 bits (ainsi qu'un code signifiant une absence de donnée ou de contrôle) et envoyés directement au calculateur fonctionnel. Ce format 9 bits est celui d'entrée et de sortie des processeurs élémentaires du calculateur fonctionnel. Un flot de données est une séquence de signaux de contrôle et de données synchrone avec l'horloge du calculateur, qui peut être reçu directement par un processeur du calculateur fonctionnel. Une ligne est une suite de pixels encadrée par des signaux de contrôle ou parenthèses (ouvrante au début et fermante à la fin). Une trame (ou image) est une suite de lignes (de longueurs identiques) encadrée par des signaux de contrôle ou parenthèses (ouvrantes au début et fermante à la fin) Un flot vidéo numérique est une suite de trames (de longueurs identiques). Les trames sont délivrées à la cadence de 25 Hz (25 images par seconde, standard PAL). Les lignes sont délivrées à la cadence de 15625 Hz (standard PAL) en dehors des périodes de retour trame. Les pixels sont délivrés à la fréquence de fonctionnement du calculateur fonctionnel en dehors des périodes de retour trame et de retour ligne. La fréquence du calculateur est choisie en général de telle sorte que les pixels soient carrés (l'espacement des pixels dans la ligne est égal à l'espacement entre les lignes) soit environ 16 MHz mais elle peut être différente. Le calculateur fonctionnel peut fonctionner jusqu'à 25 MHz. A 16 MHz la taille maximale des images est de 800 X 572 pixels. I1 est possible d'insérer dans le système d'acquisition un module de détramage constitué d'une mémoire d'image et d'un contrôleur. En effet, le standard PAL décompose les images en deux trames entrelacées et il est intéressant d'avoir les images en une seule trame. Le système ci-dessus peut être étendu à la couleur. Dans ce cas, le format PAL est décomposé en trois composantes rouge, vert et bleu et chacune des voies est numérisée en parallèle et trois flots vidéo numérique sur 8 bits (vu logiquement comme une flot 24 bits) sont envoyés en parallèle au calculateur fonctionnel. Les trois flots sont alors reçus directement par trois processeurs du calculateur fonctionnel. Plusieurs dispositifs d'entrée vidéo numérique noir et blanc et couleur pourraient être connectés simultanément au calculateur fonctionnel (sur des processeurs différents naturellement). Des dispositifs de sortie vidéo numérique symétriques des dispositifs d'entrée peuvent également être réalisés et connectés au calculateur pour visualiser des résultats de traitement. Bien que le système illustré sur la figure 1 prévoit un dispositif d'entrée vidéo numérique, d'autres types de capteurs peuvent être connectés au calculateur fonctionnel pourvu qu'ils fournissent les données de manière sérielle sur 8 bits ou N fois 8 bits à une fréquence compatible avec celle du calculateur, c'est à dire inférieure ou égale à 25 MHz. Le calculateur fonctionnel 10 selon l'invention, représenté schématiquement sur la figure 2, est une machine massivement parallèle avec une architecture de type flots de données extrêmement régulière. Il se compose de 1024 processeurs fonctionnels identiques de référence générale 20 sur la figure, dits de "bas niveau" car ils servent à implémenter les fonctions élémentaires où la topologie de l'image est conservée, et 36 modules "transputers" désignés par la référence générale 22 sur la figure, et qui effectuent les traitements dits de "hauts niveaux", c'est à dire les traitements par image, par ligne, par colonne ou sur des structures symboliques (contours, régions...) et des structures de données irrégulières. Ces processeurs de haut niveau ne faisant pas partie de l'invention, ils ne seront pas décrits en détail. Les processeurs fonctionnels 20 travaillent à la fréquence pixel qui est la fréquence d'échantillonnnage du flux des données d'entrée vidéo numériques ainsi que du flux des données de sortie vidéo numériques, et chaque processeur effectue un nombre fixe d'opérations par pixel. Dans le mode de réalisation préféré, les processeurs fonctionnels sont intégrés deux par deux dans des circuits VLSI. Le calculateur fonctionnel selon l'invention comporte alors 512 circuits VLSI comprenant chacun deux processeurs fonctionnels. Les processeurs fonctionnels sont interconnectés suivant un réseau de type cubique tridimensionnel 8x8x16. Mais il va de soi que, sans sortir du cadre de l'invention, les processeurs pourraient être connectés selon des réseaux de type différent comportant un nombre quelconque de dimensions. Le transfert des données entre les processeurs de bas niveau 20 et les processeurs de haut niveau 22 se fait au moyen de dispositifs physiques de changement de format (non montrés) tels que des adaptateurs parallèle/série et des adaptateurs série/parallèle. Le calculateur fonctionnel 10 est connecté à un ordinateur hôte par un bus 24 par l'intermédiaire d'interfaces telles qu'une interface de programmation et de test et une interface des données d'entrée/sortie de bas débit 28, grâce auxquelles l'ordinateur hôte peut effectuer la programmation et les opérations de contrôle du calculateur fonctionnel. Le calculateur fonctionnel se programme dans un langage de type fonctionnel particulièrement bien adapté au traitement par flots de données, et dont la caractéristique principale est que chaque fonction primitive du langage correspond exactement à un opérateur directement implémentable sur l'un des processeurs fonctionnels du calculateur fonctionnel. Chaque processeur effectue à la fois un traitement et le routage des flots de données vers ses voisins. Des exemples d'opérateurs sont illustrés sur la figure 3. Les diagrammes a,b,c et d montrent des exemples de routage possible effectués par un opérateur. I1 y a principalement deux type d'opérateurs flots de données: les opérateurs arithmétiques ou logiques (diagrammes e et f sur la figure 3 ), les opérateurs de reséquencement (diagramme g sur la figure 3) et les opérateurs ayant une fonction mémoire tels que représentés en h et i. Les opérateurs arithmétiques ou logiques prennent en entrée un ou plusieurs flots de données et produisent en sortie un ou plusieurs flots de données. Les flots de sorties sont des fonctions arithmétiques ou logiques directes des flots d'entrée. Par exemple, dans le cas d'un additionneur simple (deux entrées et une sortie), les valeurs composant le flot sont la somme des valeurs composant les flots d'entrée. Les sommes sont calculées dans l'ordre d'entrée. La structure parenthésée des deux flots d'entrée doit être identique et celle du flot de sortie sera également identique (on ne peut additionner que des images de même taille et l'image résultat aura aussi la même taille). I1 existe des opérateurs à trois entrées et deux sorties comme l'additionneur avec retenue (deux entrées 8 bits et une entrée 1 bit, une sortie 8 bits et une sortie 1 bit), des opérateurs à une seule entrée et une seule sortie (incrémenteur 8 bits) et beaucoup d'autres combinaisons. Les opérateurs de reséquencement ont (en général) une seule entrée et une seule sortie. Ils effectuent des décalages logiques sur des structures de données. Sur des images les quatre opérateurs principaux sont: le retard pixel: insertion d'un élément quelconque en tête de chaque ligne et suppression du dernier élément de chaque ligne, l'avance pixel: suppression du premier élément de chaque ligne et insertion d'un élément quelconque en fin de chaque ligne, le retard ligne: insertion d'une ligne quelconque en tête de chaque trame et suppression de la dernière ligne de chaque trame, l'avance ligne: suppression de la première ligne de chaque trame et insertion d'une ligne quelconque en fin de chaque trame. I1 est naturellement possible de définir des opérateurs de reséquencement qui sont une combinaison d'un nombre quelconque de ces quatre là (par exemple retard d'une ligne et deux pixels). I1 est également possible de définir des opérateurs de reséquencement plus complexes (par exemple, retard de M pixels avec M dépendant du numéro de ligne) et des opérateurs combinant un reséquencement et une (ou plusieurs) opération(s) arithmétique(s) ou logique(s). I1 n'y a pas non plus nécessairement une correspondance un pour un entre les flots d'entrée et de sortie. Par exemple, un opérateur peut ne sortir qu'une valeur unique pour chaque ligne complète qui entre, cette valeur étant la somme des valeurs de la ligne. Les flots qui arrivent sur un opérateur arithmétique ou logique ne sont pas à priori synchrones entre eux. C'est pourquoi les opérateurs doivent contenir des FIFOs en entrée de manière à mémoriser temporairement un flot de données en attendant les autres. Ces FIFOs doivent être dimensionnées de manière à pouvoir encaisser le déphasage maximum possible entre les entrées faute de quoi se produirait soit un blocage (deadlock) soit la perte des données. I1 est à noter que les opérateurs de reséquencement doivent incorporer des mémoires tampons dont la taille doit correspondre à celle de l'objet sur lequel ils effectuent un retard ou une avance (1 valeur pour 1 pixel, M valeurs pour une ligne jusqu'à M pixels). Comme représenté schématiquement sur la figure 4, chaque processeur fonctionnel composant le calculateur fonctionnel de l'invention comprend une unité de traitement 30 avec son chemin de données (Data Path), ses mémoires de programme et de données, et sa partie de contrôle. Chaque processeur comprend 6 ports d'entrée/sortie notés PM, PS, PE, PW, PU et PD, ayant chacune une partie réceptrice 32-1 à 32-6 et une partie émettrice 34-1 à 34-6. Chaque port est connecté à un et un seul port d'un processeur immédiatement voisin, ce qui justifie le nombre de 6 ports dans un réseau cubique tridimensionnel. Mais il sera évident pour l'homme du métier que le nombre de ports d'entrée/sortie de chaque processeur sera différent si le calculateur fonctionnel est basé sur une autre architecture. Ainsi, un réseau cubique à 4 dimensions nécessiterait que chaque processeur ait 8 ports d'entrée/sortie. Chaque processeur comprend également trois piles d'entrée SA 36-1, SB 36-2 et SE 36-3 et trois piles de sortie SC 38-1, SD 38-2 et SF 38-3. Dans- le mode de réalisation représenté sur la figure 4, ces piles sont des mémoires tampons du type premier entré - premier sorti (FIFO), mais il est clair que ces piles pourraient être des mémoires tampons de tout autre type sans sortir du cadre de la présente invention. Les parties réceptrices du processeur sont reliées aux piles d'entrée 36 au moyen d'un réseau cross-bar d'entrée 40 et les parties émettrices sont reliées aux piles de sortie 38 au moyen d'un réseau cross-bar de sortie 42. La programmation des réseaux cross-bar d'entrée 40 et de sortie 42 est statique et demeure inchangée pendant toute l'exécution d'un programme sur le calculateur fonctionnel. Par voie de conséquence, les connexions entre processeurs et la circulation des flots sont également statiques. La programmation du réseau cross-bar d'entée se fait au niveau des piles d'entrée. Un registre de configuration de 3 bits est associé à chaque pile d'entrée, CONFSA 44-1 pour la pile SA, CONFSB 44-2 pour la pile SB et CONFSE 44-3 pour la pile SE. Chacun de ces registres de configuration spécifie soit une connexion avec la partie réceptrice d'un des ports du processeur, soit l'absence de connexion. Les registres de configuration commandent des multiplexeurs 46-1, 46-2, 46-3 du type 6:1 associés respectivement aux piles d'entrée SA, SB, et SE. La réplication d'un flot de données en entrée se fait en configurant plusieurs piles d'entrée avec une connexion à la partie réceptrice d'un même port. La programmation du réseau cross-bar de sortie se fait au niveau des ports, plus précisément au niveau de leur partie émettrice. Un registre de configuration de 2 bits est associé à la partie émettrice de chaque port, CONFPD 48-1 pour le port PD, CONFPV 48-2 pour le port PV, CONFPW 48-3 pour PW, CONFPE 48-4 pour PE, CONFPS 48-5 pour PS, CONFPN 486 pour PN. Chaque registre de configuration spécifie soit une connexion avec l'une des 3 piles de sortie, soit l'absence de connexion. Chacun des registres de configuration commande un multiplexeur du type 3:1, 50-1 à 50-6 et un amplificateur à trois états 52-1 à 52-6, chaque multiplexeur étant connecté respectivement à l'entrée de chaque partie émettrice de port et chaque amplificateur à trois états étant connecté respectivement à la sortie de cette même partie émettrice. La réplication d'un flot de données en sortie se fait en configurant la partie émettrice de plusieurs ports de sortie avec une connexion à une même pile de sortie. Pour passer d'un processeur à un autre, un flot de données va de la pile de sortie d'un processeur vers une ou plusieurs piles d'entrée d'un ou plusieurs autres processeurs en passant par les réseaux cross-bar et les ports. Le cas le plus simple représenté sur la figure 5 est utilisé lorsqu'un flot de données va seulement d'un processeur vers un autre processeur et lorsque le processeur récepteur n'utilise qu'une seule fois ce flot de données. Le cas général est utilisé lorsqu'il est nécessaire de générer plusieurs flots de données identiques à partir d'un seul flot de données, comme illustré sur la figure 6 où les parties émettrices de 3 ports d'un processeur émetteur 54 sont connectées aux parties réceptrices de ports de trois processeurs récepteurs différents 56, 58, 60. Ceci est nécessaire parce que la sortie du processeur 54 est utilisée par les trois processeurs 56, 58, 60. Dans ce cas, le flot de données est répliqué à travers le réseau cross-bar de sortie du processeur émetteur 54. Il est également possible qu'un processeur, tel que le processeur 56 de la figure 6, ait besoin de plusieurs copies d'un même flot d'entrée. Dans ce cas, le flot de données est répliqué à travers le cross-bar d'entrée 64 du processeur récepteur 56. On voit donc que la réplication des flots de données s'effectue toujours à l'intérieur des processeurs fonctionnels dans les cross-bars d'entrée ou de sortie mais jamais en connectant physiquement plusieurs ports d'entrée à un port de sortie. Les liaisons port à port sont bipolaires et orientées. Dans une connexion entre deux ports, il y a toujours un circuit émetteur (partie émettrice du port de sortie) et un circuit récepteur (partie réceptrice du port d'entrée). La partie réceptrice du port de sortie doit donc être configurée comme inactive. De même pour la partie émettrice du port d'entrée qui est configurée comme inactive. Les connexions servant au transfert des données entre une pile de sortie d'un processeur fonctionnel au moyen de la partie émettrice d'un port du processeur et une pile d'entrée d'un autre processeur fonctionnel au moyen de la partie réceptrice d'un port de celui-ci, vont maintenant être décrites en liaison avec la figure 7. Tout d'abord, il faut noter que le calculateur fonctionnel complet et chacun des processeurs fonctionnels qui le composent travaillent de manière entièrement synchrone suivant une horloge unique (qui est également l'horloge pixel des entrées/sorties vidéo-numériques). Chacune des piles FIFO d'entrée et des piles FIFO de sortie se comporte comme un registre échantillonné par cette horloge. Les ports d'entrée/sortie fonctionnent également en mode synchrone comme des registres mais avec des synchronisations légèrement différentes. Dans le cas général, le calculateur fonctionnel travaille avec des données sur M bits. Dans ce mode de réalisation M est égal à 8, mais il pourrait être différent tout en étant au moins égal à 2. Les données peuvent être soit des valeurs numériques (2M valeurs sur M bits) soit des signaux de contrôle (deux valeurs servant à délimiter des listes: ). Les données et les signaux de contrôle sont codées dans un champ "donnée étendue" de M+1 bits (qui code 2M + 2 valeurs). Le codage est fait de la manière suivante: - Données numériques: bit M égal à 1 bits M - 1 à 0: valeur M bits - Délimiteurs: bit M égal à 0. bit M - 1 égal à 1. bits M-2 à l:(si M > 2) quelconques bit O: 0 pour - Invalide: bit M égal à 0. bit M - 1 égal à 0. bits M - 2 à 0 : quelconques. Les codes invalides signifient: absence de données. Ils ont été introduits afin de pouvoir compacter les données au niveau des connexions physiques entre ports. Le système de sortie du calculateur fonctionnel se compose, comme on l'a vu en référence à la figure 4, de trois piles de sortie (SC, SD, SF) et de leurs parties de contrôle, ayant pour références sur la figure 7, respectivement 70, 74 et 78 pour les piles de sortie et 72, 76 et 80 pour les parties de contrôle; des parties émettrices des six p - 3 bus (1 par pile de sortie) de données (étendues) sur M+1 bits notés Y.D, avec Y = C, D ou F les bus Y.D relient les connexions Y.D de tous les ports et la connexion DOUT de la pile Y. - 3 lignes (1 par pile d'entrée) notées: Y.OREADY, avec Y = C, D ou F, les lignes Y.OREADY relient les connexions Y.OREADY de tous les ports, la connexion OREADY de la pile Y et la connexion OREADY de la partie contrôle de la pile Y. - 3 lignes(1 par pile d'entrée)notées: Y.SHOUT,avec Y = C, D ou F, les lignes Y.SHOUT relient les connexions Y.SHOUT de tous les ports, la connexion SHOUT de la pile Y et la connexion SHOUT de la partie contrôle de la pile Y. - 3X6 lignes (1 par couple (pile de sortie, port)) notées Y.PREADY.Z, avec Y = C, D ou F et Z = N, S, E, W, U ou D, les lignes Y.PREADY.Z relient la connexion Y.PREADY du port Z et la connexion PREADY.Z de la partie contrôle de la pile Y. L'interface d'une partie émettrice d'un port d'entrée/sortie avec le cross-bar de sortie comprend donc les connexions suivantes pour chaque pile de sortie, connexions qui apparaissent trois fois avec les préfixes respectifs Y = C, D ou F correspondant aux piles SC, SD, et SF et pour chacun des six ports: -une entrée de données sur M+1 bits: YDEO)M] -une entrée d'état d'un bit: Y.SHOUT. -une entrée d'état d'un bit: Y.OREADY. -une sortie sélection d'un bit:Y.PREADY. Ainsi, la partie émettrice 82 du port PN représentée sur la figure 7 reçoit des données de la pile de sortie SC 70 par l'entrée de données C.D, reçoit l'entrée d'état C.SHOUT et l'entrée d'état Y.OREADY en provenance de la partie contrôle de pile 72 et transmet la sélection C.PREADY à la partie contrôle 72. En référence de nouveau à la figure 4, on a vu que le système d'entrée du calculateur fonctionnel se compose des parties réceptrices des six ports d'entrée/sortie (PN, PS, PE, PW, PV, PD) des trois piles d'entrée (SA, SB, SE) et des parties de contrôle de ces piles, . et du réseau cross-bar d'entrée. Sur la figure 7, seule la partie réceptrice 86 du port PS a été représentée pour ne pas surcharger la figure; les piles d'entrée et leurs parties de contrôle ont respectivement comme références 88, 92 et 96 pour les piles d'entrée et 90, 94 et 98 pour leur parties de contrôle. De la même façon, chaque pile d'entrée telle que SA qui est seule représentée en détail sur la figure 7, comprend une entrée de données sur M+1 bits : DIN, une entrée de commande d'un bit SHIN fournie par la partie réceptrice du port connecté à la pile et qui indique que les données peuvent être empilées, et un signal de sortie d'état d'un bit IREADY indiquant que la pile d'entrée n'est pas pleine. Le réseau cross-bar d'entrée est constitué uniquement de fils d'interconnexion, la logique correspondante étant intégrée dans celle des ports d'entrée/sortie. Bien que sur la figure 7, les seules connexions représentées sont celles qui relient la partie réceptrice du port PS et la pile d'entrée SA, il faut comprendre que chacune des piles d'entrée SA, SB, SE est connectée à la partie réceptrice du port PS de la façon décrite précédemment en référence à la figure 7. De même, les parties réceptrices des six ports d'entrée/sortie PN, PS, PE, PW, PU, PD sont connectées également de la même façon à chacune des piles d'entrée. Ainsi le réseau cross-bar d'entrée est composé de: - 3 bus (1 par pile d'entrée) de données (étendues) sur M+1 bits notés X.D, avec X 2 A, B ou E, les bus X.D relient les connexions X.D de tous les ports et la connexion DIN de la pile X. - 3 lignes (1 par pile d'entrée) notées: X.IREADY, avec X = A, B ou E, les lignes X.IREADY relient les connexions X.READY de tous les ports et la connexion IREADY de la pile X. - 3 lignes (1 par pile d'entrée) notées: X.SHIN, avec X = A, B ou E, les lignes X.SHIN relient les connexions X.SHIN de tous les ports et la connexion SHIN de la pile X. - 3x6 lignes (1 par couple (pile d'entrée,port)) notées X.VAL.Z, avec X = A, B ou E et Z 2 N, S, E, W, U ou D, les lignes X.VAL.Z relient la connexion X.VAL du port Z et la connexion VAL.Z de la partie contrôle de la pile X. L'interface d'une partie réceptrice de port avec le réseau cross-bar d'entrée comprend donc les connexions suivantes pour chaque pile d'entrée, connexions qui apparaissent trois fois avec les préfixes respectifs X = A, B ou E correspondant aux piles SA, SB, SE et pour chacun des six ports d'entrée/sortie - Une sortie de données sur M+1 bits: XD EO,M), - Une sortie d'état d'un bit: X.SHIN - Une entrée d'état d'un bit: X.IREADY - Une entrée sélection d'un bit: X.VAL Ainsi, la partie réceptrice 86 du port représentée sur la figure 7 transmet des données à la pile d'entrée (SA) 88 sur la sortie de données AD, transmet la sortie d'état A.SHIN à la pile d'entrée 88, reçoit l'entrée d'état A.IREADY de la pile d'entrée 88, et reçoit le signal sélection A.VAL à partir de la partie de contrôle 90 de la pile d'entrée SA. Toujours en référence à la figure 7, l'interface entre la partie émettrice du port d'entrée/sortie 82 et la partie réceptrice du port d'entrée/sortie 86 se compose du bus de transfert de données sur M+1 bits: D tO-M], de la ligne de commande/état de 1 bit: SRCREADY de la partie émettrice 82 à la partie réceptrice 86, et de la ligne de commande/état de 1 bit: DESTREADY de la partie réceptrice 86 à la partie émettrice 82. Les deux lignes de commande/état jouent un rôle primordial dans l'invention comme on le verra par la suite. Cette interface peut être réalisée sous forme compactée dans le but de réduire le nombre de connexions physiques entre les ports, en utilisant les codes invalides dans le format de données étendu. Dans la forme compactée illustrée sur la figure 8, entre la partie émettrice 82 et la partie réceptrice 86, la commande/état SRCREADY n'apparaît plus dans l'interface. La commande/état SRCREADY ayant la double signification que la donnée étendue associée (D) est valide et qu'on en demande le transfert, elle peut être facilement codée dans la donnée étendue elle-même. Si SRCREADY = 1, les deux portes ET 100 et 102 laissent passer les bits DM et Dom~1 sans les modifier. Comme l'un au moins des bits DM et Dom~1 est égal à 1 (voir ci-dessus) le signal fourni à la sortie du circuit OU 104 est égal à 1 et restitue donc SRCEADY. Si SRCREADY = O, les bits DM et DOM~1 sont forcés à O par les portes ET 100 et 102, ce qui n'a aucune importance puisque la valeur de la donnée n'a aucune signification dans ce cas. Le bit en sortie du circuit OU 104 est donc égal à 0, restituant ainsi le signal SRCREADY 2 O Le dispositif de compactage, inséré entre les connexions internes et externes des ports d'entrée/sortie, est transparent pour le fonctionnement des processeurs fonctionnels. Il sera ignoré par la suite, et les explications qui suivent seront données en considérant qu'il n'y a pas compactage. Avant d'expliquer la technique des transferts de données entre deux processeurs fonctionnels, une description est maintenant donnée des divers éléments de la figure 7, à savoir, la partie de contrôle 72 d'une pile de sortie, la partie émettrice 82 et son registre de configuration 84 d'un processeur fonctionnel transmetteur, la partie réceptrice 86 d'un processeur fonctionnel récepteur et la partie de contrôle 90 d'une pile d'entrée, ceci de façon à comprendre comment sont générés les différents signaux nécessaires au fonctionnement du calculateur fonctionnel. Comme illustré sur la figure 9, la partie de contrôle d'une pile de sortie est extrêmement simple. Sa seule fonction est de calculer la commande de dépilement SHOUT qui est obtenue par la porte ET 106 des signaux PREADY.Z (où Z N, S, E, M, U ou D) reçus de tous les ports d'entrée/sortie et spécifiant que les ports de destination sont prêts à effectuer ou ont déjà effectué le transfert des données, et du signal O.READY indiquant que la pile correspondante est non vide. Cette logique de contrôle est la même pour les trois piles de sortie SC, SD, et SF.. La figure 10 illustre la partie émettrice du port qui transmet le flot de données, telle que la partie 82 sur la figure 7. Cette partie est la même pour les six ports d'entrée/sortie d'un processeur fonctionnel. Tout d'abord, la pile de sortie est sélectionnée grâce au registre de configuration à 2 bits 110 dont la programmation s'effectue par la méthode SCANPATH grâce aux signaux SCANIN, CLOCK, SCANVAL et SCANOUT. Le signal CLEAR sert pour la remise à zéro du circuit et pour la protection contre les court-circuits. Le contenu du registre 110 est décodé par le décodeur 112 du type "un parmi trois" qui fournit les trois sorties Y.VAL avec Y étant C, D ou F . Ces trois signaux inversés par les inverseurs 114, 116, et 118 sont combinés respectivement avec les trois signaux Y.OREADY en provenance des piles de sortie dans les portes OU 120, 122 et 124 et les sorties des portes OU est l'objet d'un ET logique par la porte ET 126 dont une quatrième entrée est un signal inversé par l'inverseur 128 d'un signal PORTDONE expliqué ci-après. La condition de transfert des données ou signal OUTDATA est la fonction logique ET fournie par le circuit ET 130 entre le signal SRCREADY fourni localement et le signal DESTREADY reçu de la partie réceptrice du port connecté. Le signal DESTREADY est également utilisé en combinaison avec le signal PORTDONE et chacun des signaux fournis à la sortie des inverseurs 114, 116 et 118, pour fournir respectivement les signaux C.PREADY, D.PREADY et F.PREADY au moyen des circuits OU 132, 134, 136. Pour mémoire les signaux Y.PREADY sont transmis par la partie émettrice du port à la partie contrôle des piles de sortie (voir figure 7). La transmission des données D(8:0) a lieu comme suit. Les données Y.D(8:O) en provenance des piles sont autorisées au travers des portes ET respectives 138, 140 et 142 par les signaux Y.VAL en provenance du décodeur 112. Les sorties des portes ET 138, 140 et 142 sont ensuite combinées dans le circuit OU 144 pour fournir D(8:OJ transmises à la partie réceptrice du port directement connecté. En ce qui concerne le signal PORTDONE évoqué plus haut, il est fourni par une bascule R-S synchrone 146 dont l'entrée d'enclenchement SPORTDONE et l'entrée de restauration RPORTDONE sont formées de la façon suivante. Tout d'abord un signal PSHOUT est obtenu au moyen de la fonction logique ET par les portes ET 148, 150 et 152 des signaux Y.VAL et respectivement des signaux Y.SHOUT provenant de la partie contrôle des piles de sorties SC, SD et SF, et indiquant que les données peuvent être dépilées, les sorties des circuits ET 148, 150 et 152 étant combinées par la porte OUT 154 pour fournir PSHOUT. Ce signal sert comme signal RPORTDONE de restauration de la bascule 146. Le signal PSHOUT est inversé par l'inverseur 156, et le signal inversé est combiné dans la porte ET 158 pour fournir le signal SPORTDONE destiné à enclencher la bascule 146. On voit donc que la bascule 146 fournissant le bit PORTDONE est activée seulement si un transfert a été effectué au niveau du port et les données correspondantes n'ont pas été dépilées, et désactivée dès que les données sont dépilées. Enfin, un signal d'autorisation OE(D,SRCREADY) des données et du signal SRCREADY est fourni par la combinaison dans le circuit OU 160 des trois signaux de sélection des piles de sortie Y.VAL provenant du décodeur 112. La partie de contrôle des piles d'entrée telle que la partie de contrôle 90 de la figure 7 est illustrée sur la figure 11. Cette partie de contrôle, qui est la même pour chaque pile d'entrée SA, SB ou SE, se compose d'un registre à configuration de 3 bits 162 dont la programmation s'effectue par la même méthode SCANPATH grâce aux signaux SCANIN, CLOCK SCANVAL et SCANOUT. Le signal CLEAR est utilisé pour la remise à zéro du circuit et pour la protection contre les court-circuits (le code 000 étant alors utilisé). Le registre 162 fournit une ligne de sortie qui alimente un décodeur 164 du type un parmi 6, qui génère les signaux VAL.Z avec Z pouvant désigner l'un des ports N, S, E, W, U ou D, pour la sélection dudit port. La figure 12 illustre la partie réceptrice du port qui reçoit le flot de données, telle que la partie réceptrice 86 du pot N de la figure 7. Cette partie est la même pour les six ports d'entrée/sortie d'un processeur fonctionnel Le signal DESTREADY qui est transmis à la partie émettrice du port directement connecté est une combinaison des signaux X.IREADY provenant de la pile d'entrée pour indiquer que celle-ci n'est pas pleine et des signaux X.VAL provenant de la partie de contrôle d'entrée pour la sélection du port d'entrée/sortie, X pouvant être A, B ou E. La combinaison est la suivante : chaque signal X.VAL inversé par un inverseur 166, 168 ou 170 est l'objet d'un OU avec le signal X.READY au moyen d'un circuit OU 172, 174, ou 176, et les sorties des trois circuits OU sont les entrées d'une porte ET 178 qui fournit le signal DESTREADY en sortie. La condition de transfert des données, ou signal INDATA, est la fonction logique ET fournie par le circuit ET 180 entre le signal DESTREADY obtenu plus haut et le signal SRCREADY reçu de la partie émettrice du port connecté. Le signal INDATA ainsi obtenu est utilisé pour générer les signaux X.SHIN transmis vers les piles d'entrée de façon à indiquer à celles-ci que les données peuvent être empilées. Pour ce faire le signal INDATA sert d'entrée à trois amplificateurs trois états 182, 184 et 186 dont la sortie est commandée respectivement par les signaux X.VAL. Ainsi, A.VAL commande l'amplificateur 182 pour fournir le signal A.SHIN, B.VAL commande l'amplificateur 184 pour fournir le signal B.SHIN, et E.VAL commande l'amplificateur 186 pour fournir le signal E.SHIN. Pour chacun des amplificateurs, la ligne de commande valide l'entrée INDATA si elle fournit un bit 1. On notera que si aucune des commandes X.VAL en provenance de tous les ports n'est active, la pile X n'est pas utilisée, la ligne trois états étant alors forcée à zéro à l'entrée de la pile X. Inversement, il est possible de sélectionner plusieurs piles d'entrée dans le cas où il est nécessaire d'avoir plusieurs copies d'un même flot de données, c'est à dire que un, deux ou les trois signaux A.VAL, B.VAL et E.VAL peuvent être actifs. Les données D(8:0] qui proviennent de la partie émettrice du port d'entrée/sortie directement connecté, sont envoyées à l'entrée de trois amplificateurs trois états 188, 190 et 192. Ces amplificateurs sont commandés respectivement par les signaux X.VAL de façon à fournir les données A.D(8:O) vers la pile d'entrée SA, les données B.D(8:O] vers la pile d'entrée SB ou les données E.DL8:O) vers la pile d'entrée SE. Pour chacun des amplificateurs, la ligne de commande X.VAL valide l'entrée si ladite ligne fournit un bit 1 et ne valide pas l'entrée dans le cas inverse. On notera que si aucune des commandes X.VAL en provenance de tous les ports n'est active, la pile X n'est pas utilisée et le bus de données trois états est alors forcé à zéro au niveau de l'entrée de la pile X. Inversement, il est possible de sélectionner plusieurs piles d'entrée, comme on l'a vu précédemment dans le cas où il est nécessaire d'avoir plusieurs copies d'un même flot de données. Enfin, un signal d'autorisation OE(DESTREADY) du signal DESTREADY est fourni par la combinaison dans le circuit OU 194 des trois signaux de sélection de port d'entrée/sortie provenant des décodeurs (tel 164 de la figure 11) des piles d'entrée. On voit donc que la ligne DESTREADY est activée, si et seulement si, au moins une des piles SA, SB ou SE est connectée au port. Le transfert de données entre deux processeurs fonctionnels se fait d'une manière synchrone. Toutes les données sont échantillonnées sur le front montant d'une horloge. Deux horloges interviennent dans ces transferts une horloge externe (horloge de la machine fournie en entrée au circuit), utilisée pour la spécification des temps caractéristiques pour les interfaces des ports et une horloge interne (dérivée de l'horloge externe par amplification à l'intérieur du circuit), utilisée pour la spécification des temps caractéristiques pour les interfaces des piles FIFO. Les spécifications des temps au niveau des ports sont déduites de celles au niveau des piles et sont définies seulement pour la connexion des dispositifs d'entrées-sorties de type flots de données ou d'opérateurs coprocesseurs spécifiques. De tels dispositifs doivent opérer de manière complètement compatible avec ces spécifications. Pour chaque interface, quatre temps caractéristiques sont définis par rapport à l'horloge: - un temps de prépositionnement (setup) minimum des entrées avant le front montant - un temps de maintien (hold) minimum des entrées après le front montant. - un temps de propagation minimum pour les sorties après le front montant. Ces temps caractéristiques apparaissent pour chaque signal de chaque interface. Une fois ces temps définis et s'ils sont cohérents, entre eux, avec le temps de cycle, et avec le "skew" (décalage admissible entre deux horloges externes délivrées à deux circuits connectés), toutes les opérations apparaissent comme des opérations purement logiques. Chaque front montant d'horloge définit un nouvel état global de la machine (état n) fonction uniquement de l'état précédent (état n-l). La décision de transfert de données d'un port d'entrée/sortie à un autre se fait uniquement au niveau des partie émettrice et partie réceptrice des ports concernés, indépendamment des décisions de dépilement et d'empilement. Le signal SRCREADY spécifie que la partie émettrice est prête à transférer des données (la pile de sortie connectée n'est pas vide et les données correspondantes n'ont pas déjà été transférées) et que ces données sont prêtes sur les lignes D(O-M). Le signal DESTREADY spécifie que la partie réceptrice est prête à recevoir des données (la ou les piles d'entrées connectées n'est pas (ne sont pas) pleine(s)). Le transfert est effectué si et seulement si SRCREADY et DESTREADY sont actifs. Le calcul de cette condition (ET logique) est effectué simultanément et de manière identique dans les parties réceptrice et émettrice, chacune ayant une "pièce" de l'information et recevant l'autre "pièce" de l'autre partie. Le calcul double évite un calcul centralisé et un aller retour d'information (il permet donc une transaction plus rapide). La décision d'empilement dans une pile d'entrée est dérivée de la décision au niveau du port connecté: il y a empilement si et seulement si une transaction a été décidée au niveau du port. La décision de dépilement est dérivée de celle des ports connectés. La situation est plus complexe que pour les piles de sortie car une pile de sortie peut être connectée aux parties émettrices de plusieurs ports et chacune prend une décision de transaction localement (pour éviter une centralisation d'information et donc un aller-retour de signaux qui serait catastrophique en performance). Le dépilement est effectué seulement lorsque la dernière des parties émettrices des ports connectés a effectué sa transaction. Si ces transactions ne sont pas simultanées il faut garder une trace du fait que des données ont déjà été transférées sur la partie émettrice d'un port alors que les données n'ont pas été dépilées de la pile de sortie qui lui est connectée afin que ces données ne soient pas retransférées aux cycles suivants en attendant que la transaction s'effectue sur les parties émettrices des autres ports connectés à cette même pile de sortie. Dans ce but, le registre 1 bit PORTDONE est actif seulement lorsqu'une transaction a été décidée au niveau du port et que les données correspondantes n'ont pas été dépilées de la pile de sortie connectée. Il est utilisé pour forcer le signal SRCREADY à O et bloquer les transferts jusqu'à ce que les données soit dépilées. Le bit de registre PORTDONE est extrêmement important. I1 est en effet indispensable pour permettre la réalisation d'un contrôle distribué sans aller-retour d'informations dans le cas des destinations multiples. Par ailleurs, le contrôle distribué sans aller-retour d'informations est le seul moyen d'assurer le transfert des données par cycle avec le temps de cycle court. Le bit de registre PORTDONE est donc un point clé majeur qui permet aux processeurs fonctionnels et au calculateur fonctionnel de travailler avec une fréquence élevée (25 MHz pour le mode de réalisation préféré). De façon générale, la caractéristique essentielle de l'invention est d'effectuer les transactions, c'est à dire le dépilement des piles de sortie, le transfert des données d'un processeur à un autre, et l'empilement dans les piles d'entrée, avec un contrôle distribué et sans aller-retour d'informations de contrôle grâce au fait que chaque pile d'entrée, chaque pile de sortie, chaque partie émettrice de port, chaque partie réceptrice de port, effectue sa partie de contrôle sans faire appel à un contrôle centralisé. Cependant, l'un des problèmes pouvant survenir dans un calculateur fonctionnel selon l'invention utilisant des processeurs de flots de données dont les ports sont configurables en entrée et en sortie est la gestion des conflits bidirectionnels pouvant se produire lorsque deux ports sont programmés en opposition du fait que chaque processeur est programmé indépendamment par ses registres de configuration internes. I1 ne peut y avoir de contrôle sur les conflits pouvant se produire entre des ports connectés autrement que par le logiciel de programmation de haut niveau. Compter uniquement sur la perfection du logiciel serait hasardeux, principalement pendant les phases de mise au point du logiciel. Une erreur de programmation pourrait en outre conduire à une consommation excessive et à une destruction des circuits. Un contrôle par un dialogue entre les circuits serait possible mais il aurait l'inconvénient de nécessiter au moins deux broches supplémentaires par port d'entrée-sortie, ce qui ne serait pas valable économiquement. Le dispositif qui est utilisé dans le cadre de l'invention, pour détecter les conflits et protéger les circuits contre les court-circuits repose sur le fait que, d'une part la programmation de la direction des entrées/sorties est statique et que, d'autre part, tous les transferts se font de manière synchrone. Lorsque deux ports d'entrée/sortie sont connectés tel que décrit ci-dessus, la situation est normale si le premier port est programmé en entrée et le second est programmé en sortie ou bien si le premier port est programmé en sortie et le second est programmé en entrée. La situation est anormale si les deux ports sont programmés de la même façon. Toutefois, il n'y a pas de problème si les deux ports sont tous deux programmés en entrée puisque dans ce cas, aucune valeur de bit ne sera transmise sur les lignes reliant les deux ports. Le cas gênant est lorsque les deux ports sont tous deux programmés en sortie de données. Le dispositif de protection est associé à chaque plot d'entrée ou de sortie d'un port d'entrée/sortie correspondant donc aux lignes du bus de données Dt8:0] et aux lignes SRCREADY et DESTREADY, un plot (ou PAD) étant constitué d'une surface pour la connexion avec la broche correspondante du circuit. La figure 13 illustre un tel dispositif de protection associé au PAD 200. En supposant qu'il y ait conflit bidirectionnel, le PAD 200 et le PAD du port auquel il est connecté vont donc vouloir imposer des niveaux différents sur le noeud qui les relie. Le décodage du registre de configuration programmé en sortie valide, au moyen de la bascule 202, l'amplificateur trois états 204. La donnée de sortie (par exemple un des bits de D(8:0] reçue par l'intermédiaire de la bascule 206, est donc validée par l'amplificateur 204. En supposant que le bit de sortie soit différent du bit d'entrée reçu par le PAD 200, le noeud commun 208 prend une valeur moyenne qui est nécessairement une valeur logique différente de celle qu'il devrait y avoir normalement. Ainsi, supposons que la donnée de sortie soit un zéro; si la donnée d'entrée est un 1, la valeur moyenne s'établit entre 0 et 5 volts soit approximativement 2,5 volts qui se traduit par un bit 1 à la sortie de 1 'amplificateur/isolateur/translateur 210 (puisque toute tension supérieure à 1,4 volt est considéré comme un 1). La comparaison entre les deux bits différents correspondant à la donnée d'entrée et la donnée de sortie dans le circuit OU EXCLUSIF 212 fournit un bit 1 en sortie qui, grâce au circuit ET 214 autorisé par l'activation reçue de la bascule 202, est produit à l'entrée du circuit OU 216. Le circuit OU 216 commun à tous les dispositifs de protection, effectue une synthèse des conflits détectés. I1 est actif dès qu'au moins un des PAD a été détecté comme étant en conflit. Après échantillonnage par la bascule commune 218, ce signal d'erreur est utilisé pour remettre dans l'état inactif tous les registres de configuration du port. Ce dispositif fonctionne parce que la programmation de la direction des entrées/sorties est statique et parce que, comme les transferts sont synchrones et que la condition d'erreur est également échantillonnée par les impulsions d'horloge, il n'y a pas déclenchement parasite durant les transitions. Bien sûr, ce déclenchement du dispositif bouleverse l'état du circuit ainsi que son fonctionnement. Mais ce déclenchement correspond à une erreur de programmation et donc à un cas anormal. La détection de l'erreur est facile: il suffit alors d'identifier un circuit dont le registre de configuration a été déprogrammé; ce circuit étant nécessairement en conflit bidirectionnel avec un de ses voisins. Le calculateur fonctionnel qui vient d'être décrit cidessus permet donc la circulation de flots de données entre une pile de sortie d'un processeur fonctionnel vers une ou plusieurs piles d'entrée d'un ou plusieurs autres processeurs fonctionnels, ceci grâce au transfert des données à chaque cycle d'horloge, à une logique optimisée qui permet des temps de cycles courts, à un transfert sans aller-retour d'informations préalables, à un routage reconfigurable, et à un fonctionnement correct quels que soient les blocages sur les destinations. La caractéristique essentielle de cette machine est que, lors du transfert de données entre deux ports d'entrée/sortie, chacun d'eux calcule son action de manière indépendante grâce à l'évaluation simultanée de la condition SRCREADY ET DESTREADY, ces signaux étant fournis respectivement par chacun des deux ports. L'une des caractéristiques d'un tel calculateur est qu'il n'est pas conçu seulement comme une machine de traitement d'image en temps réel mais également comme un outil de conception pour des automates de traitement d'images. Elle permet en effet la définition et la validation en temps réel d'algorithmes: - D'une part en s'assurant qu'il existe pour l'algorithme en question au moins une architecture permettant son implantation en temps réel, - D'autre part en fournissant une "netliste" d'opérateurs câbles permettant une implémentation sous forme de circuits VLSI et/ou cartes électroniques. Ceci oriente obligatoirement le concepteur d'algorithmes de traitement d'images vers des solutions du type calculateur fonctionnel dont on sait qu'elles sont intégrables en temps réel et pour lesquelles on peut fournir, avec un coût de conception très faible, une architecture correspondante. En outre les automates implémentent une fonction précise. L'architecture du calculateur fonctionnel figée, dont seuls les opérateurs utiles et les connexions nécessaires sont implémentées, fournit un système compact, de faible consommation et de faible coût. Bien que les solutions mises en oeuvre pour les processeurs du calculateur fonctionnel selon l'invention permettent de fonctionner jusqu'à une fréquence de 25 MHz dans le cadre d'une technologie CMOS 1 pm, l'utilisati disque (type RAID avec interface HiPPI), les traiter à la volée, et écrire les résultats de traitement sur un autre disque de même type. Les concepts de calculateur fonctionnel et d'automates de traitement peut être étendu au-delà du traitement d'images en temps réel. Tous les dispositifs décrits peuvent être appliqués dans le cas de liens physiques d'une largeur quelconque (par exemple 32+1 bits au lieu de 8+1) et les opérateurs peuvent être étendus à du traitement flottant. Une application possible serait par exemple des traitements de mécanique des fluides numériques à partir de données sur disque avec des résultats visualisés sur un moniteur en temps réel. REVENDICATIONS 1 Calculateur fonctionnel du type à flots de données pour système de traitement d'images vidéo comprenant un nombre N de processeurs fonctionnels identiques effectuant chacun, pendant un temps de base, un traitement élémentaire sur un flot de données entrantes pour fournir un flot de données sortantes; chacun desdits processeurs fonctionnels comportant une unité de traitement (30) et étant connecté à une pluralité d'au plus n autres processeurs fonctionnels par n ports d'entrée/sortie, les flots de données entrantes étant emmagasinées à chaque temps de base dans m mémoires tampons d'entrée (36) connectées en entrée à chacun desdits ports d'entrée/sortie et en sortie à ladite unité de traitement, et les flots de données sortantes étant emmagasinées à chaque temps de base dans p mémoires tampons de sortie (38) connectées en entrée à ladite unité de traitement et en sortie à chacun desdits ports d'entrée/sortie; la connexion desdites mémoires tampons d'entrée et de sortie auxdits ports d'entrée/sortie s'effectuant par des moyens de commutation (40, 46 ou 42, 50) commandés par des registres de configuration (44 ou 48) dont le contenu est programmé de façon statique pendant une suite de temps de base correspondant à l'exécution d'un programme sur le calculateur fonctionnel; ledit calculateur fonctionnel étant caractérisé en ce que, pour chaque processeur fonctionnel chacun desdits n ports d'entrée/sortie comporte une partie émettrice (34) et une partie réceptrice (32), la partie émettrice étant connectée à chacune desdites P mémoires tampons de sortie et la partie réceptrice étant connectée à chacune desdites m mémoires tampons d'entrée, seulement l'une desdites parties émettrice et réceptrice étant active pendant chacun des temps de base de ladite suite de temps de base, la partie émettrice de chacun desdits n ports d'entrée/sortie comprend une ligne de commande de sortie connectée à la partie réceptrice du port d'entrée/sortie de l'un de ladite pluralité d'au plus n processeurs, la partie réceptrice de chacun desdits n ports d'entrée/sortie comprend une ligne de commande d'entrée connectée à la partie émettrice du port d'entrée/sortie de l'un de ladite pluralité d'au plus n processeurs; et en ce que, pour chaque temps de base de ladite suite de temps de base la partie émettrice de chacun desdits ports d'entrée/sortie, si elle est active, transmet au moyen de ladite ligne de commande de sortie un signal SRCREADY indiquant que ladite partie émettrice est disponible pour transférer un flot de données sortantes, et la partie réceptrice du port d'entrée/sortie de l'un de ladite pluralité d'au plus n processeurs auquel ledit port d'entrée/sortie est connecté transmet au moyen de la dite ligne de commande d'entrée un signal DESTREADY indiquant que ladite partie réceptrice est disponible pour recevoir un flot de données entrantes, ladite partie émettrice active d'un desdits ports d'entrée/sortie ne transmet un flot de données sortantes en provenance d'une desdites p mémoires tampons de sortie vers la partie réceptrice active du port d'entrée/sortie de l'un de ladite pluralité d'au plus n processeurs seulement si ladite ligne de commande de sortie transmet ledit signal SRCREADY ET si ladite ligne de commande d'entrée reçoit ledit signal DESTREADY, de sorte que le transfert des données par la partie émettrice active d'un desdits ports d'entrée/sortie vers la partie réceptrice du port d'entrée/sortie de l'un de ladite pluralité d'au plus n processeurs a lieu dès lors que la condition ET entre lesdits signaux SRCREADY et DESTREADY est réalisée dans ladite partie émettrice, ladite partie réceptrice étant disponible pour recevoir lesdites données du fait que la même condition est vérifiée simultanément par ladite partie réceptrice. 2 Calculateur fonctionnel selon la revendication 1 dans lequel ladite ligne de commande -d'entrée de la partie réceptrice (86) d'un port d'entrée/sortie fournit un signal DESTREADY actif à condition que l'une au moins desdites m mémoires tampons d'entrée (88) ait été sélectionnée au moyen de la programmation d'un registre de configuration (164) associé à chacune desdites mémoires tampons d'entrée et que la ou lesdites mémoires tampons ne soient pas pleines. 3 Calculateur fonctionnel selon la revendication 1 ou 2 dans lequel ladite ligne de commande de sortie de la partie émettrice (82) d'un port d'entrée/sortie fournit un signal SRCREADY actif à condition que l'une desdites p mémoires tampons de sortie (70) ait été sélectionnée au moyen de la programmation du registre de configuration (84) associé audit port d'entrée/sortie et que ladite mémoire de sortie ne soit pas vide. 4 Calculateur fonctionnel selon la revendication 3 dans lequel la partie émettrice (82) de chaque port d'entrée/sortie comprend une bascule (146) qui est enclenchée lorsque, d'une part le signal SRCREADY fourni par ladite partie émettrice et le signal DESTREADY fourni sur la ligne de commande en provenance de la partie réceptrice (86) du port d'entrée/sortie qui lui est connecté sont tous deux actifs à l'entrée d'un circuit ET (130), et d'autre part ladite mémoire tampon de sortie (70) qui a été sélectionnée n'est pas encore disponible pour fournir les données qu'elle contient, la sortie active de la bascule (PORTDONE) étant utilisée pour forcer ledit signal SRCREADY à zéro et bloquer le transfert de données jusqu'à ce que ladite mémoire tampon de sortie soit disponible pour fournir ses données. 5 Calculateur fonctionnel selon l'une des revendications précédentes caractérisé en ce que chaque connexion d'entrée/sortie (200) d'un port d'entrée/sortie est connecté à un dispositif de protection comprenant un comparateur (212) pour comparer le signal de sortie à destination du port directement connecté au signal d'entrée en provenance dudit port et fournir un signal de remise à zéro du registre de configuration dont le contenu sert à la programmation de ladite connexion lorsque les deux signaux sont à des niveaux différents, de - façon à détecter et à éviter toute erreur de programmation ayant entraîné un conflit bidirectionnel entre deux ports. 6 Calculateur fonctionnel selon la revendication 5, dans lequel tous les dispositifs de protection associés aux connexions d'entrée/sortie (200) d'un port d'entrée/sortie ont les sorties de leurs comparateurs (212) respectifs connectés à l'entrée d'un circuit OU commun (216) dont la sortie remet à zéro tous les registres de configuration dudit port dès qu'un conflit bidirectionnel a été détecté. 7 Calculateur fonctionnel selon l'une des revendications précédentes, dans lequel le nombre n de ports d'entrée/sortie est égal à m+p. 8 Calculateur fonctionnel selon la revendication 7, dans lequel m= p =3 et n =6, l'ensemble des N processeurs fonctionnels formant un réseau cubique tridimensionnel. 9 Calculateur fonctionnel selon la revendication 8, dans lequel N=1024. 10 Calculateur fonctionnel selon l'une des revendications précédentes utilisé comme outil de conception d'automates de vision. 11. Automate de vision comprenant un calculateur fonctionnel selon l'une quelconque des revendications 1 à 9.