Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
DEVICE AND METHOD FOR PARALLEL DATA PROCESSING
Document Type and Number:
WIPO Patent Application WO/2017/207889
Kind Code:
A1
Abstract:
The invention relates to a method for processing data by means of a device (DV2) for parallel data processing comprising a unit (U1) configured to receive, on parallel inputs, a set (W) of binary words (wi). The method comprises a step consisting of reading, by means of the second unit (U1), all or some of the binary words of the set (W) of binary words (wi) applied on the parallel inputs of same, and sending a purge instruction (Nj) for purging certain binary words of the set of binary words, and a step consisting of supplying to the second unit (U1) the word or words (a5-a7) of the first set of binary words which have not been purged, and one or more binary words (b0-b4) of a new set of binary words (W', W2).

Inventors:
MARONGIU, Alessandro (Via Tuoro Cappuccini 38, Avellino, 83100, IT)
PAUL, Gaël (34 Rue de l'Opéra, AIX EN PROVENCE, 13100, FR)
MODICA, Daniele (Via Eugenio Barsanti 6, Roma, 00146, IT)
PRETET, Damien (280 Rue Jean Amado, AIX EN PROVENCE, 13090, FR)
Application Number:
FR2017/051210
Publication Date:
December 07, 2017
Filing Date:
May 18, 2017
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
PLDA GROUP (805 Rue Guillibert, AIX-EN-PROVENCE, 13290, FR)
International Classes:
G06F5/00; G06F13/40; G06F17/50
Foreign References:
US8504745B12013-08-06
US5537624A1996-07-16
US5237701A1993-08-17
Attorney, Agent or Firm:
MARCHAND, André et al. (OMNIPAT, 24 Place des Martyrs de la Résistance, AIX EN PROVENCE, 13100, FR)
Download PDF:
Claims:
Revendications

1. Dispositif (DV2) de traitement parallélisé de données, comprenant :

- une première unité (UO) comprenant des sorties parallèles (Si) pour fournir des mots binaires (w;) en parallèle, et

- une seconde unité (Ul) comprenant des entrées parallèles (Ei) pour recevoir un ensemble (W) de mots binaires (w;) en parallèle fournis par la première unité (UO),

caractérisé en ce que la seconde unité (Ul) est configurée pour lire simultanément, au cours d'une même étape de lecture, tout ou partie des mots binaires de l'ensemble (W) de mots binaires (wi) appliqué sur ses entrées parallèles, et renvoyer une instruction (Nj) de purge de certains mots binaires de l'ensemble de mots binaires,

et en ce qu'il comprend une unité de mise en correspondance de données (BDG) reliant les sorties parallèles de la première unité (UO) aux entrées parallèles de la seconde unité (Ul) et configurée pour :

- fournir à la seconde unité (Ul) un premier ensemble de mots binaires (W, Wl) fourni par la première unité (UO),

- après lecture par la seconde unité (Ul) d'une partie (a0-a4) des mots binaires du premier ensemble (W, Wl) de mots binaires, fournir à la seconde unité (Ul) le ou les mots (a5-a7) du premier ensemble de mots binaires n'ayant pas été purgés, et un ou plusieurs mots binaires (b0-b4) d'un second ensemble de mots binaires (W, W2) fourni par la première unité.

2. Dispositif selon la revendication 1, dans lequel l'unité de mise en correspondance de données (BDG) est également configurée pour, lorsqu'une partie du second ensemble (W2) de mots binaires a été purgée, fournir à la seconde unité (Ul) le ou les mots binaires (bl-b7) du second ensemble de mots binaires n'ayant pas été purgés et un ou plusieurs mots binaires (cO) d'un troisième ensemble (W3) de mots binaires fourni par la première unité. 3. Dispositif selon l'une des revendications 1 et 2, dans lequel :

- la seconde unité (Ul) est configurée pour, lors de la lecture d'une partie des mots binaires appliqués sur ses entrées parallèles, lire des mots binaires (a0-a4) présents sur des entrées à plus haute priorité de lecture, et

- l'unité de mise en correspondance de données (BDG) est configurée pour, après purge par la seconde unité d'une partie (a0-a4) de mots binaires du premier ensemble de mots binaires, appliquer sur les entrées à plus haute priorité de la seconde unité des mots (a5-a7) du premier ensemble (Wl) de mots binaires précédemment appliqués sur des entrées parallèles et n'ayant pas été purgés, et appliquer sur des entrées parallèles à plus faible priorité de lecture de la seconde unité un ou plusieurs mots binaires (b0-b4) du second ensemble (W2) de mots binaires.

4. Dispositif selon la revendication 3, dans lequel l'unité de mise en correspondance de données comprend :

- au moins deux registres d'entrée (RI, R2) agencés en parallèle et ayant chacun des entrées parallèles reliées aux sorties de la première unité (U0),

- un registre de sortie (R3) ayant des sorties reliées aux entrées parallèles de la seconde unité (Ul),

- un circuit à réorganisation de données (BS) reliant des sorties des registres d'entrée à des entrées parallèles du registre de sortie, et

- un circuit de contrôle (CCT1) configuré pour :

- charger dans les registres d'entrée des ensembles (Wl, W2, W3, W4, W5) de mots binaires (a0-a7, b0-b7, c0-c7, d0-d7, e0-e7) fournis par la première unité, et charger dans le registre de sortie, par l'intermédiaire du circuit à réorganisation de données, des mots binaires présents dans les registres d'entrée,

- commander le circuit à réorganisation de données en fonction du nombre de mots binaires (Nj) ayant été purgés, de manière à charger dans des cellules à plus haute priorité de lecture du registre de sortie les mots binaires (a5-a7) présents dans les registres d'entrée et n'ayant pas été purgés, et charger dans des cellules de plus faible priorité du registre de sortie des mots binaires (b0-b4) présents dans les registres d'entrée et n'ayant pas encore été présentés à la seconde unité.

5. Dispositif selon la revendication 4, dans lequel le circuit de contrôle (CCT1) est configuré pour charger dans l'un des registres d'entrée (RI, R2) un nouvel ensemble (W3) de mots binaires fourni par la première unité (U0) au moins lorsque tous les mots binaires de l'ensemble (W2) de mots binaires présent dans le registre d'entrée ont été purgés.

6. Dispositif selon l'une des revendications 1 à 5, dans lequel la seconde unité est configurée pour déterminer le nombre de mots binaires qu'elle lit au cours d'une même étape de lecture en fonction des mots binaires précédemment lus ou en fonction d'une consigne externe.

7. Dispositif selon l'une des revendications 1 à 6, dans lequel la première unité est un processeur, un circuit d'interface de communication série/parallèle, un circuit d'adaptation d'un nombre de bus agencés en parallèle, un circuit de modification de fréquence d'horloge, ou une combinaison de ces éléments.

8. Circuit intégré à réseau de portes programmables, comprenant un dispositif selon l'une des revendications 1 à 7.

9. Procédé de traitement de données au moyen d'un dispositif de traitement parallélisé de données (DV2) comprenant une première unité (U0) comprenant des sorties parallèles (Si) pour fournir des mots binaires (w;) en parallèle, et une seconde unité (Ul) comprenant des entrées parallèles (Ei) pour recevoir un ensemble (W) de mots binaires (w;) en parallèle fournis par la première unité (U0), procédé caractérisé en ce qu'il comprend les étapes consistant à :

- au moyen de la seconde unité (Ul), lire simultanément, au cours d'une étape de lecture, tout ou partie des mots binaires de l'ensemble (W) de mots binaires (wi) appliqué sur ses entrées parallèles, et renvoyer, après une étape de lecture, une instruction (Nj) de purge de certains mots binaires de l'ensemble de mots binaires, et

- après lecture par la seconde unité (Ul) de tout ou partie (a0-a4) des mots binaires du premier ensemble (W, Wl) de mots binaires, fournir à la seconde unité (Ul) le ou les mots

(a5-a7) du premier ensemble de mots binaires n'ayant pas été purgés, et un ou plusieurs mots binaires (b0-b4) d'un second ensemble de mots binaires (W, W2) fourni par la première unité. 10. Procédé selon la revendication 9, comprenant l'étape consistant à, lorsqu'une partie du second ensemble (W2) de mots binaires a été purgée, fournir à la seconde unité le ou les mots binaires (bl-b7) du second ensemble de mots binaires n'ayant pas été purgés et un ou plusieurs mots binaires (cO) d'un troisième ensemble (W3) de mots binaires fourni par la première unité.

11. Procédé selon l'une des revendications 9 et 10, comprenant les étapes consistant à :

- lors de la lecture de tout ou partie (a0-a4) des mots binaires appliqués sur les entrées parallèles de la seconde unité, lire des mots binaires (a0-a4) présents sur des entrées à plus haute priorité de lecture, et - après purge d'une partie (a0-a4) des mots binaires du premier ensemble (Wl) de mots binaires, appliquer sur les entrées à plus haute priorité de lecture de la seconde unité des mots (a5-a7) du premier ensemble de mots binaires précédemment appliqués sur des entrées de plus faible priorité de lecture et n'ayant pas été purgés, et appliquer sur des entrées parallèles à plus faible priorité de lecture de la seconde unité un ou plusieurs mots binaires (b0-b4) du second ensemble (W2) de mot binaire.

12. Procédé selon l'une des revendications 9 à 11 , comprenant l'étape consistant à prévoir, entre la première et la seconde unité, une unité de mise en correspondance de données (BDG) reliant les sorties parallèles de la première unité (U0) aux entrées parallèles de la seconde unité (Ul) et comprenant au moins deux registres d'entrée (RI, R2) agencés en parallèle et ayant chacun des entrées parallèles reliées aux sorties de la première unité (U0), un registre de sortie (R3) ayant des sorties reliées aux entrées parallèles de la seconde unité (Ul), et un circuit à réorganisation de données (BS) reliant des sorties des registres d'entrée à des entrées parallèles du registre de sortie.

13. Procédé selon la revendication 12, comprenant une étape consistant à charger dans l'un des registres d'entrée (RI R2) un nouvel ensemble de mots binaires fourni par la première unité, au moins lorsque tous les mots binaires de l'ensemble de mots binaires présent dans le registre d'entrée ont été purgés.

14. Procédé pour réaliser, dans un circuit intégré à réseau de portes programmables (FPGA), un dispositif (DV2) exécutant une fonction de traitement parallélisé de données nécessitant des étapes de lecture simultanée de mots binaires (w;) dans un ensemble (W) de mots binaires véhiculés par des bus de données parallèles, procédé comprenant :

- une étape (FOI) de description fonctionnelle de la fonction de traitement en utilisant un langage à haut niveau d'abstraction et en utilisant une variable non typée de taille non spécifiée (FOI) pour désigner les mots binaires (wi) devant être lus simultanément,

- une étape (F02) de définition de contraintes matérielles à prendre en compte dans la réalisation du dispositif et incluant un choix d'un degré de parallélisme du dispositif,

- à partir de la définition fonctionnelle et des contraintes matérielles, une étape (F03) de description matérielle du dispositif présentant le degré de parallélisme choisi, en utilisant comme architecture cible un dispositif conforme à l'une des revendications 1 à 7 dans lequel la seconde unité (Ul) exécute la fonction de traitement des données, et - à partir de la description matérielle du dispositif, une étape (F04) de configuration du circuit intégré à réseau de portes programmables, pour obtenir le dispositif présentant le degré de parallélisme choisi.

15. Procédé selon la revendication 14, comprenant les étapes consistant à :

- tester le dispositif (F05),

- remanier (F02) la définition des contraintes matérielles du dispositif de manière à modifier son degré de parallélisme, sans modifier la description fonctionnelle (FOI) de la fonction de traitement,

- remanier (F03) la description matérielle du dispositif à partir de la définition remaniée des contraintes matérielles, et

- à partir de la description matérielle remaniée du dispositif, reconfigurer (F04) le circuit intégré à réseau de portes programmables, pour obtenir le dispositif présentant le degré de parallélisme modifié.

Description:
DISPOSITIF ET PROCÉDÉ DE TRAITEMENT PARALLÉLISÉ DE DONNÉES

La présente invention concerne un procédé de traitement parallélisé de données, un dispositif de traitement parallélisé de données, ainsi qu'un procédé pour réaliser un dispositif de traitement parallélisé de données.

En microélectronique, le "parallélisme" ou "traitement parallélisé de données" ("parallelized data processing") est une technique consistant à utiliser des architectures de processeurs capables de traiter des données de manière simultanée, sous le contrôle de programmes spécifiquement prévus pour assurer un tel traitement. Cette technique a pour but de réaliser le plus grand nombre d'opérations en un temps le plus petit possible.

Les circuits intégrés à réseau de portes programmables, ou FPGA ("Field Programmable Gâte Array") sont particulièrement adaptés à la réalisation d'architectures de processeurs parallélisées. Un circuit FPGA vierge est transformé en un circuit intégré opérationnel par configuration du réseau de portes logiques qu'il comprend. Cette configuration est tout d'abord définie dans un langage descriptif matériel, dit HDL ("Hardware Description Language"), ou ses variantes (VHDL, Verilog...), permettant de décrire le comportement ainsi que l'architecture du circuit matériel. La description du circuit en langage descriptif matériel est ensuite compilée pour obtenir une configuration de circuit FPGA. Chaque fabricant de circuit FPGA propose à cet effet des outils dits de synthèse logique et de placement routage permettant, à partir du circuit HDL, d'obtenir une configuration de FPGA également appelée "bitstream", prête à être chargée dans la mémoire de configuration du FPGA pour obtenir un circuit intégré opérationnel.

La description d'un circuit en langage descriptif matériel étant une opération complexe réservée aux spécialistes, il est connu de décrire la fonction de traitement exécutée par le circuit en utilisant un langage à haut niveau d'abstraction, par exemple le langage C ou C++, pour obtenir une description dite fonctionnelle. La description fonctionnelle est ensuite compilée pour obtenir le circuit HDL, soit l'expression de la fonction dans le langage descriptif matériel, qui est elle-même compilée pour obtenir une configuration de circuit FPGA. Ce procédé permet de mettre la filière des circuits FPGA à la portée de programmeurs n'ayant pas d'expérience dans l'utilisation des langages descriptifs matériels. Le passage de la description fonctionnelle à la description matérielle fait intervenir un compilateur à synthèse de haut niveau HLS ("High Level Synthesis") qui effectue cette transformation à partir d'un modèle d'architecture matérielle, ou architecture cible, définissant les caractéristiques générales du circuit HDL. Ce modèle d'architecture présente un certain nombre de caractéristiques ajustables, choisies au cours d'une étape de définition des contraintes matérielles intervenant avant la compilation HLS, telles que des vitesses d'horloge de bus, le nombre de bus de données agencés en parallèle et la taille de ces bus (nombre de bits qu'ils véhiculent). L'architecture cible permettant de mettre en œuvre le circuit HDL n'est généralement pas parfaitement adaptée aux besoins particuliers de la fonction à mettre en œuvre, notamment en ce qui concerne le nombre de bus parallèles qu'elle comporte relativement au nombre de données que la fonction peut traiter simultanément. Ainsi, le nombre de bus parallèles est généralement un multiple de 2, même si la fonction mise en œuvre ne traite pas simultanément un nombre de données qui est un multiple de 2. Toutefois, l'architecture cible peut présenter un nombre de bus de données qui, à défaut d'être égal, est supérieur au nombre de données que la fonction peut traiter simultanément, afin d'exploiter au maximum son parallélisme. Lorsque plusieurs fonctions de traitement de données sont mises en œuvre dans le même circuit, c'est la fonction capable de traiter simultanément le plus grand nombre de données qui détermine généralement le degré de parallélisme retenu dans l'architecture cible.

Ces caractéristiques structurelles de l'architecture cible doivent être prises en compte au stade de la description fonctionnelle du circuit, en utilisant des variables typées - c'est-à- dire de taille déterminée -, telles que CHAR (1 octet), INT (4 octets avec un processeur 32 bits), et DOUBLE (8 octets) en C ou C++, qui sont adaptées au nombre de données parallélisées. Par exemple, si l'architecture cible présente 8 bus de données parallèles, la variable "DOUBLE" sera utilisée dans la description fonctionnelle du circuit. II s'ensuit une sorte de "contamination" de la description fonctionnelle par des contraintes matérielles, liée à une inadéquation de l'architecture cible relativement aux besoins réels de la fonction et à l'utilisation de variables typées. Cette "contamination" complexifîe l'expression de la fonction dans le langage à haut niveau d'abstraction. Elle complexifîe également le processus de réalisation et de mise au point d'un circuit FPGA. Un circuit FPGA étant en effet reconfigurable à volonté, il est habituel de remanier l'architecture cible après une période d'évaluation du circuit, en revenant à l'étape de définition des contraintes matérielles. La nouvelle définition des contraintes matérielles peut se traduire, notamment, par une augmentation du nombre de bus parallèles, afin de résoudre des cas de congestion de données identifiés au cours de la période d'évaluation. Dans ce cas, la description fonctionnelle du circuit doit être réécrite afin de prendre en compte les modifications apportées à l'architecture matérielle qui la met en œuvre.

Il existe également des fonctions configurées pour traiter simultanément un nombre de données qui varie avec le temps. Cette variabilité peut dépendre d'une consigne externe ou d'un paramètre interne qui est fonction du résultat d'étapes de traitement précédentes (fonctions auto-adaptatives dites "à comportement dépendant des données"). Dans ce cas, une modification de l'architecture cible entraîne un encore plus grand nombre de modifications dans l'expression de la fonction dans le langage à haut niveau d'abstraction.

Il pourrait donc être souhaité de prévoir un procédé et un dispositif de traitement parallélisé de données qui simplifie le processus de conception, de réalisation et d'optimisation d'un circuit FPGA.

Il pourrait également être souhaité de prévoir un procédé et un dispositif de traitement parallélisé de données qui simplifie le traitement d'un nombre de données différent du nombre de données véhiculées par un ensemble de bus parallèles.

Des modes de réalisation de l'invention concernent un dispositif de traitement parallélisé de données, comprenant : une première unité comprenant des sorties parallèles pour fournir des mots binaires en parallèle, et une seconde unité comprenant des entrées parallèles pour recevoir un ensemble de mots binaires en parallèle fournis par la première unité, dans lequel la seconde unité est configurée pour lire simultanément, au cours d'une même étape de lecture, tout ou partie des mots binaires de l'ensemble de mots binaires appliqué sur ses entrées parallèles, et renvoyer une instruction de purge de certains mots binaires de l'ensemble de mots binaires. Le dispositif comprend une unité de mise en correspondance de données reliant les sorties parallèles de la première unité aux entrées parallèles de la seconde unité et configurée pour fournir à la seconde unité un premier ensemble de mots binaires fourni par la première unité, et, après lecture par la seconde unité d'une partie des mots binaires du premier ensemble de mots binaires, fournir à la seconde unité le ou les mots du premier ensemble de mots binaires n'ayant pas été purgés, et un ou plusieurs mots binaires d'un second ensemble de mots binaires fourni par la première unité. Selon un mode de réalisation, l'unité de mise en correspondance de données est également configurée pour, lorsqu'une partie du second ensemble de mots binaires a été purgée, fournir à la seconde unité le ou les mots binaires du second ensemble de mots binaires n'ayant pas été purgés et un ou plusieurs mots binaires d'un troisième ensemble de mots binaires fourni par la première unité.

Selon un mode de réalisation, la seconde unité est configurée pour, lors de la lecture d'une partie des mots binaires appliqués sur ses entrées parallèles, lire des mots binaires présents sur des entrées à plus haute priorité de lecture, et l'unité de mise en correspondance de données est configurée pour, après purge par la seconde unité d'une partie de mots binaires du premier ensemble de mots binaires, appliquer sur les entrées à plus haute priorité de la seconde unité des mots du premier ensemble de mots binaires précédemment appliqués sur des entrées parallèles et n'ayant pas été purgés, et appliquer sur des entrées parallèles à plus faible priorité de lecture de la seconde unité un ou plusieurs mots binaires du second ensemble de mots binaires.

Selon un mode de réalisation, l'unité de mise en correspondance de données comprend au moins deux registres d'entrée agencés en parallèle et ayant chacun des entrées parallèles reliées aux sorties de la première unité, un registre de sortie ayant des sorties reliées aux entrées parallèles de la seconde unité, un circuit à réorganisation de données reliant des sorties des registres d'entrée à des entrées parallèles du registre de sortie, et un circuit de contrôle configuré pour : charger dans les registres d'entrée des ensembles de mots binaires fournis par la première unité, et charger dans le registre de sortie, par l'intermédiaire du circuit à réorganisation de données, des mots binaires présents dans les registres d'entrée, commander le circuit à réorganisation de données en fonction du nombre de mots binaires ayant été purgés, de manière à charger dans des cellules à plus haute priorité de lecture du registre de sortie les mots binaires présents dans les registres d'entrée et n'ayant pas été purgés, et charger dans des cellules de plus faible priorité du registre de sortie des mots binaires présents dans les registres d'entrée et n'ayant pas encore été présentés à la seconde unité.

Selon un mode de réalisation, le circuit de contrôle est configuré pour charger dans l'un des registres d'entrée un nouvel ensemble de mots binaires fourni par la première unité au moins lorsque tous les mots binaires de l'ensemble de mots binaires présent dans le registre d'entrée ont été purgés. Selon un mode de réalisation, la seconde unité est configurée pour déterminer le nombre de mots binaires qu'elle lit au cours d'une même étape de lecture en fonction des mots binaires précédemment lus ou en fonction d'une consigne externe. Selon un mode de réalisation, la première unité est un processeur, un circuit d'interface de communication série/parallèle, un circuit d'adaptation d'un nombre de bus agencés en parallèle, un circuit de modification de fréquence d'horloge, ou une combinaison de ces éléments. Des modes de réalisation concernent également un circuit intégré à réseau de portes programmables, comprenant un dispositif tel que défini ci-dessus.

Des modes de réalisation concernant également un procédé de traitement de données au moyen d'un dispositif de traitement parallélisé de données comprenant une première unité comprenant des sorties parallèles pour fournir des mots binaires en parallèle, et une seconde unité comprenant des entrées parallèles pour recevoir un ensemble de mots binaires en parallèle fournis par la première unité, le procédé comprenant les étapes consistant à : au moyen de la seconde unité, lire simultanément, au cours d'une étape de lecture, tout ou partie des mots binaires de l'ensemble de mots binaires appliqué sur ses entrées parallèles, et renvoyer, après une étape de lecture, une instruction de purge de certains mots binaires de l'ensemble de mots binaires, et après lecture par la seconde unité de tout ou partie des mots binaires du premier ensemble de mots binaires, fournir à la seconde unité le ou les mots du premier ensemble de mots binaires n'ayant pas été purgés, et un ou plusieurs mots binaires d'un second ensemble de mots binaires fourni par la première unité.

Selon un mode de réalisation, le procédé comprend l'étape consistant à, lorsqu'une partie du second ensemble de mots binaires a été purgée, fournir à la seconde unité le ou les mots binaires du second ensemble de mots binaires n'ayant pas été purgés et un ou plusieurs mots binaires d'un troisième ensemble de mots binaires fourni par la première unité.

Selon un mode de réalisation, le procédé comprend les étapes consistant à : lors de la lecture de tout ou partie des mots binaires appliqués sur les entrées parallèles de la seconde unité, lire des mots binaires présents sur des entrées à plus haute priorité de lecture, et après purge d'une partie des mots binaires du premier ensemble de mots binaires, appliquer sur les entrées à plus haute priorité de lecture de la seconde unité des mots du premier ensemble de mots binaires précédemment appliqués sur des entrées de plus faible priorité de lecture et n'ayant pas été purgés, et appliquer sur des entrées parallèles à plus faible priorité de lecture de la seconde unité un ou plusieurs mots binaires du second ensemble de mot binaire.

Selon un mode de réalisation, le procédé comprend l'étape consistant à prévoir, entre la première et la seconde unité, une unité de mise en correspondance de données reliant les sorties parallèles de la première unité aux entrées parallèles de la seconde unité et comprenant au moins deux registres d'entrée agencés en parallèle et ayant chacun des entrées parallèles reliées aux sorties de la première unité, un registre de sortie ayant des sorties reliées aux entrées parallèles de la seconde unité, et un circuit à réorganisation de données reliant des sorties des registres d'entrée à des entrées parallèles du registre de sortie. Selon un mode de réalisation, le procédé comprend une étape consistant à charger dans l'un des registres d'entrée un nouvel ensemble de mots binaires fourni par la première unité, au moins lorsque tous les mots binaires de l'ensemble de mots binaires présent dans le registre d'entrée ont été purgés. Des modes de réalisation concernent également un procédé pour réaliser, dans un circuit intégré à réseau de portes programmables, un dispositif exécutant une fonction de traitement parallélisé de données nécessitant des étapes de lecture simultanée de mots binaires dans un ensemble de mots binaires véhiculés par des bus de données parallèles, le procédé comprenant : une étape de description fonctionnelle de la fonction de traitement en utilisant un langage à haut niveau d'abstraction et en utilisant une variable non typée de taille non spécifiée pour désigner les mots binaires devant être lus simultanément, une étape de définition de contraintes matérielles à prendre en compte dans la réalisation du dispositif et incluant un choix d'un degré de parallélisme du dispositif, à partir de la définition fonctionnelle et des contraintes matérielles, une étape de description matérielle du dispositif présentant le degré de parallélisme choisi, en utilisant comme architecture cible un dispositif tel que décrit ci-dessus, dans lequel la seconde unité exécute la fonction de traitement des données, et à partir de la description matérielle du dispositif, une étape de configuration du circuit intégré à réseau de portes programmables, pour obtenir le dispositif présentant le degré de parallélisme choisi. Selon un mode de réalisation, le procédé comprend les étapes consistant à : tester le dispositif, remanier la définition des contraintes matérielles du dispositif de manière à modifier son degré de parallélisme, sans modifier la description fonctionnelle de la fonction de traitement, remanier la description matérielle du dispositif à partir de la définition remaniée des contraintes matérielles, et à partir de la description matérielle remaniée du dispositif, reconfigurer le circuit intégré à réseau de portes programmables, pour obtenir le dispositif présentant le degré de parallélisme modifié.

Des modes de réalisation de l'invention seront décrits dans ce qui suit, à titre non limitatif, en relation avec les dessins annexés parmi lesquels :

- la figure 1 représente un exemple de dispositif classique de traitement parallélisé de données,

- la figure 2 représente un mode de réalisation d'un dispositif de traitement parallélisé de données selon l'invention,

- la figure 3 montre un mode de réalisation d'une unité de mise en correspondance représentée sous forme de bloc sur la figure 2,

- la figure 4 est un organigramme illustrant le fonctionnement de l'unité de mise en correspondance,

- la figure 5 montre une séquence de mise en correspondance de données, exécutée par l'unité de mise en correspondance,

- la figure 6 montre des étapes d'un procédé de réalisation d'un circuit intégré FPGA selon l'invention,

- les figures 7 A, 7B, 7C illustrent le procédé de la figure 6 et montrent divers modes de réalisation d'un dispositif de traitement parallélisé de données selon l'invention présentant des degrés de parallélisme différents,

- la figure 8 montre un autre mode de réalisation d'un dispositif de traitement parallélisé de données selon l'invention, et

- la figure 9 représente un autre mode de réalisation d'un dispositif de traitement parallélisé de données selon l'invention.

Un exemple de dispositif classique de traitement parallélisé de données DVl est représenté sur la figure 1. Le dispositif comprend une unité Ua assurant la fourniture de données parallèles, une unité Ub assurant le traitement parallélisé des données fournies par l'unité Ua, et des bus de données B 0 à Bi_i reliant les deux unités. L'unité Ua comprend des sorties So à Si_i fournissant chacune un mot binaire wo à WH d'un ensemble de mots binaires W et l'unité Ub comprend des entrées E 0 à En recevant chacun un mot binaire wo à WH de l'ensemble de mots binaires, chaque sortie Si de rang i de l'unité Ua étant reliée à une entrée Ei de rang correspondant de l'unité Ub par un bus de données Bi. L'unité Ua envoie à l'unité Ub un signal RDY ("Ready") lorsque l'ensemble W de mots binaires w; est disponible sur ses sorties Si, et l'unité Ub renvoie un signal d'accusé de réception ACK ("Acknowledge") lorsque ces mots binaires ont été lus via ses entrées Ei. Sur réception du signal ACK, l'unité Ua fournit un nouvel ensemble W de mots binaires w;' (w 0 à wn) et émet de nouveau le signal RDY.

Si la fonction exécutée par l'unité Ub traite simultanément, à chaque étape de traitement, un nombre de mots binaires inférieur au nombre I de mots binaires w; véhiculés par les bus de données Bi, l'unité Ub doit néanmoins lire tous les mots binaires et mettre en mémoire ceux devant être traités au cours d'une étape de traitement suivante, afin que l'unité Ua puisse présenter sur ses sorties le nouvel ensemble de mots binaires W avant l'étape de traitement suivante. Cette étape de traitement peut en effet nécessiter des mots binaires du nouvel ensemble de mots binaires W en sus des mots binaires précédemment mémorisés.

Cet écart entre le nombre de données traitées et le nombre de données fournies doit être pris en compte dans l'écriture de la fonction dans un langage à haut niveau d'abstraction, en faisant appel à des artifices de programmation tels que l'utilisation de variables de type tableau (par exemple en langage C la variable "TABLEAU[i][j]" pour un tableau de i*j variables) qui se traduisent, après réalisation du circuit opérationnel, par la réservation de zones mémoire dédiées à ces variables et l'exécution de cycles d'accès en lecture et écriture de ces zones mémoire. Comme indiqué plus haut, un remaniement de l'architecture du dispositif DV1, après une période d'évaluation, et notamment une augmentation du nombre I de bus parallèles, implique un remaniement de la description fonctionnelle du dispositif dans un langage à haut niveau d'abstraction et complexifïe le procédé de réalisation et de mise au point de ce dispositif.

Un mode de réalisation d'un dispositif de traitement parallélisé de données DV2 selon l'invention est représenté sur la figure 2. Le dispositif comprend une unité U0 assurant la fourniture de données parallèles, une unité Ul assurant le traitement parallélisé de données, un ensemble de bus de données parallèles Bi (B 0 à Bi_i) reliant les unités U0 et Ul, et une unité de mise en correspondance BDG agencée entre les unités U0 et Ul sur les bus de données Bi. Il sera noté que, dans la présente description, le terme "mot binaire" désigne une unité de donnée pouvant être traitée par l'unité Ul et dont la taille est de plusieurs bits, par exemple 8, 16, 32, 64 bits, ou tout autre format. Ainsi, le terme "bus" désigne un groupe de plusieurs pistes conductrices en parallèle permettant de véhiculer un mot.

Chaque bus de données Bi comprend une première section Sa reliant l'unité U0 à l'unité BDG et une seconde section Sb reliant l'unité BDG à l'unité Ul . L'unité U0 comprend des sorties Si (S 0 à Si_i) reliées à des entrées Ei (E 0 à En) de l'unité BDG par la première section Sa de l'ensemble de bus Bi, et l'unité BDG comprend des sorties Si (S 0 à Si_i) reliées à des entrées Ei (E 0 à En) de l'unité Ul par la seconde section B de l'ensemble de bus Bi.

L'unité U0 envoie à l'unité BDG un signal RDY1 lorsqu'un ensemble W de mots binaires wo à wi-i est disponible sur ses sorties Si, et l'unité BDG renvoie un signal d'accusé de réception ACKl lorsque l'ensemble de mots binaires a été lu. Sur réception du signal ACKl, l'unité U0 fournit un nouvel ensemble W de mots binaires w0' à wn', et ainsi de suite. De même, l'unité BDG envoie à l'unité Ul un signal RDY2 lorsque des mots binaires wi sont disponibles sur ses sorties Si, et l'unité Ul renvoie un signal d'accusé de réception ACK2 lorsque ces mots binaires ont été lus. Sur réception du signal ACK2, l'unité BDG fournit un nouvel ensemble de mots binaires, et ainsi de suite.

Selon l'invention, l'unité Ul est configurée pour ne lire, parmi un ensemble de mots binaires fourni par l'unité BDG, que les mots binaires dont elle a immédiatement besoin, par exemple pour exécuter une étape de traitement parallélisé de données. L'unité Ul fournit alors à l'unité BDG une information sur les mots binaires ayant été lus. Cette information est fournie avec le signal ACK2, ou forme le signal ACK2. Sur réception de cette information, l'unité BDG présente de nouveau à l'unité Ul les mots binaires n'ayant pas été lus au cours de l'étape de lecture précédente, ainsi que des mots binaires du nouvel ensemble de mots binaires fourni par l'unité U0. L'unité BDG fournit ainsi à l'unité Ul des ensembles de mots binaires "hybrides" comprenant des mots binaires w;, w;' provenant d'ensembles de mots binaires différents fournis par l'unité U0.

Dans un mode de réalisation, l'unité Ul est configurée pour lire les mots binaires w; fournis par l'unité BDG selon une hiérarchie de lecture de ses entrées, par exemple en conférant à sa première entrée Eo la plus haute priorité de lecture et à sa dernière entrée En la plus faible priorité de lecture. Ainsi, lors d'une lecture partielle des mots binaires qui lui sont présentés par l'unité BDG, l'unité Ul lit prioritairement les mots binaires présents sur des entrées Ei à plus haute priorité de lecture, soit ici à commencer par l'entrée E0, et renvoie à l'unité BDG l'information sur les mots binaires ayant été lus sous la forme d'un nombre "Nj" indiquant le nombre de données lues sur ses entrée, "j" étant un indice représentant le rang de l'étape de lecture venant d'être exécutée. Le nombre Nj est inclus dans le signal ACK2(Nj), ou forme le signal ACK2(Nj).

Dans ce cas, l'unité BDG est configurée pour, après avoir reçu le nombre Nj, fournir à l'unité Ul les I-Nj mots binaires wi n'ayant pas été lus par l'unité Ul, ainsi que Nj mots binaires Wi' d'un ensemble de mots suivant W fourni par l'unité U0. A cet effet, l'unité BDG décale la position des I-Nj mots binaires wi sur ses sorties de manière que ceux-ci soient présentés sur ses sorties à plus haute priorité de lecture, et présente les Nj mots binaires wi' de l'ensemble de mots binaires suivant sur ses sorties à plus faible priorité.

Pour fixer les idées, un exemple de séquence de mise en correspondance de mots binaires sera maintenant décrit. On suppose ici que I est égal à 8 et que l'unité U0 fournit successivement à l'unité BDG les ensembles de mots binaires Wl, W2, W3, W4, W5 suivants :

Wl = aO al a2 a3 a4 a5 a6 a7

W2 = b0 bl b2 b3 b4 b5 b6 b7

W3 = cO cl c2 c3 c4 c5 c6 c7

W4 = dO dl d2 d3 d4 d5 d6 d7

W5 = eO el e2 e3 e4 e5 e6 e7

Ces ensembles de mots binaires sont lus séquentiellement par l'unité BDG et sont considérés par celle-ci comme formant une chaîne de mots binaires ininterrompue, soit : aO al a2 a3 a4 a5 a6 a7 bO bl b2 b3 b4 b5 b6 b7 cO cl c2 c3 c4 c5 c6 c7 dO dl d2 d3 d4 d5 d6 d7 eO el e2 e3 e4 e5 e6 e7 dans laquelle l'unité BDG peut former des ensembles de mots binaires différents des ensembles de mots binaires initiaux qui constituent la chaîne de mots. Au commencement d'un cycle de lecture de données par l'unité Ul, l'unité BDG fourni tout d'abord à l'unité Ul l'ensemble de mots binaires Wl : aO al a2 a3 a4 a5 a6 a7

On suppose ici qu'au cours d'une première étape de lecture, l'unité Ul lit les mots binaires aO à a4 et renvoie l'information NI =5 à l'unité BDG. Celle-ci fournit alors l'ensemble de mots binaires suivant, qui se retrouve sur les entrées E 0 à En de l'unité Ul : a5 a6 a7 bO bl b2 b3 b4

On suppose également qu'au cours d'une étape de lecture suivante, l'unité Ul lit les mots binaires a5, a6, a7, bO et renvoie l'information N2=4 à l'unité BDG. Celle-ci fournit alors à l'unité Ul l'ensemble de mots binaires suivant : bl b2 b3 b4 b5 b6 b7 cO

On suppose ensuite qu'au cours d'une étape de lecture suivante, l'unité Ul lit les mots binaires bl à b7 et cO et renvoie l'information N3= 8 à l'unité BDG. Celle-ci fournit alors à l'unité Ul l'ensemble de mots binaires suivant : cl c2 c3 c4 c5 c6 c7 dO

On suppose ensuite qu'au cours d'une étape de lecture suivante, l'unité Ul lit les mots binaires cl à c7 et renvoie l'information N4=7 à l'unité BDG. Celle-ci fournit alors à l'unité Ul l'ensemble de mots binaires suivant : dO dl d2 d3 d4 d5 d6 d7

On suppose enfin qu'au cours d'une étape de lecture suivante, l'unité Ul lit les mots binaires dO à d5, et renvoie l'information N5=6 à l'unité BDG. Celle-ci fournit alors à l'unité Ul l'ensemble de mots binaires suivant : d6 d7 eO el e2 e3 e4 e5 La figure 3 représente un mode de réalisation de l'unité BDG mettant en œuvre le procédé de mise en correspondance qui vient d'être décrit, avec hiérarchisation des entrées et utilisation du nombre Nj pour indiquer le nombre d'entrées à plus haute priorité lues au cours d'une étape de lecture de rang "j". L'unité BDG comprend deux registres d'entrée RI , R2, un circuit à réorganisation de données BS, ici un circuit à décalage circulaire, un registre de sortie R3 et un circuit de contrôle CCT1. Chaque registre comprend I cellules de registre pouvant chacun recevoir un mot binaire wi. Des entrées E0 à En du registre RI , correspondant chacune à une entrée d'une cellule du registre, sont reliées aux sorties So à Si_i de l'unité U0. De façon similaire, des entrées E0' à En ' du registre R2 sont reliées aux sorties So à Sn de l'unité U0. Des sorties So à Sn du registre RI , correspondant chacune à une sortie d'une cellule du registre, sont reliées à des entrées E 0 à En du circuit à décalage circulaire BS. De façon similaire des sorties SO' à Sn' du registre R2 sont reliées à des entrées E0' à En' du circuit à décalage circulaire BS. Le circuit BS comprend des sorties So à Sn reliées à des entrées E 0 à En du registre R3, qui comprend des sorties So à Sn reliées aux entrées E 0 à En de l'unité Ul .

Le circuit CCT1 gère les échanges de données avec l'unité U0 et l'unité Ul . Il reçoit le signal RDY1 et renvoie le signal ACK1 après avoir chargé dans l'un des registres RI , R2 un ensemble de mots binaires fourni par l'unité U0. Il reçoit également le signal ACK2(Nj) de l'unité Ul et lui envoie le signal RDY2 lorsqu'un nouvel ensemble de mots binaires a été chargé dans le registre R3. A cet effet, le circuit CCT1 applique un signal de chargement de données LDI au registre RI ou un signal de chargement de données LD2 au registre R2, et charge en alternance, dans chaque registre, les ensembles de mots binaires reçus de l'unité U0. Le circuit CCT1 s'assure que ces registres ne comprennent pas de données obsolètes ayant été lues par l'unité Ul en exécutant un procédé de mise à jour de ces registres dont un exemple sera décrit plus loin.

Le circuit CCT1 applique également un signal de décalage SHIFT au circuit BS, avec comme valeur de ce signal la dernière valeur Nj reçue de l'unité Ul , indiquant le nombre de mots binaires lus par celle-ci. Après avoir appliqué le signal SHIFT au circuit BS, le circuit CCT1 charge les mots binaires fournis par les sorties So à Sn du circuit BS dans le registre de sortie R3, en appliquant à celui-ci un signal LD3, et envoie le signal RDY2 à l'unité Ul . La figure 4 est un organigramme décrivant un exemple de configuration du circuit CCT1 , celui-ci étant par exemple réalisé sous forme d'automate fini ou "FSM" ("Finite State Machine"). On distingue des étapes B00 à B08 et des étapes COO à C04. Les étapes BOO à B08 se rapportent à la gestion des échanges de données avec les unités UO, Ul et au contrôle des décalages exécutés au moyen du circuit BS. Les étapes COO à C04 forment une boucle de mise à jour des registres RI, R2.

Les étapes BOO à B05 visent à initialiser l'unité BDG au commencement d'un cycle de transfert de données entre les unités UO et Ul . A l'étape BOO, le circuit CCT1 attend que le signal RDY1 soit reçu de l'unité BO, puis charge le registre RI et renvoie le signal ACK1 à l'étape B01. A l'étape B02, le circuit CCT1 attend que le signal RDY1 soit reçu de l'unité BO, puis charge le registre R2 et envoie le signal ACK1 à l'étape B03. A l'étape B04, le circuit CCT1 applique le signal SHIFT=0 au circuit à décalage circulaire BS. A l'étape B05, le circuit CCT1 charge le registre R3 et envoie le signal RDY2 à l'unité Ul .

A l'étape B06, le circuit CCT1 attend de recevoir l'accusé de réception de lecture ACK2 de l'unité Ul, incluant (ou formé par) le nombre Nj de mots binaires lus par l'unité Ul . Lorsque cette information est reçue, le circuit CCT1 va à l'étape COI pour exécuter la boucle de mise à jour des registres RI, R2, avant d'aller à l'étape B07 au cours de laquelle il applique le signal SHIFT=Nj au circuit à décalage circulaire BS. A l'étape B08, le circuit CCT1 charge le registre R3 avec les données fournies par le circuit BS et envoie le signal RDY2 à l'unité Ul, puis retourne à l'étape B06 pour attendre un nouvel accusé de réception de lecture de la part de l'unité Ul et le nombre Nj correspondant.

La boucle de mise à jour des registres comprend une étape d'initialisation COO pouvant être exécutée lors de l'initialisation de l'unité BDG (étapes BOO à B05), au cours de laquelle le circuit CCT1 met à zéro une variable "r" ainsi qu'une variable "∑Nj" égale à la somme des nombres Nj reçus de l'unité Ul depuis la dernière remise à zéro de cette variable.

A l'étape C01, le circuit CCT1 mémorise la dernière valeur Nj reçue à l'étape B06 et rafraîchit la variable∑Nj en ajoutant à sa valeur précédente la nouvelle valeur Nj reçue. A l'étape C02, le circuit CCT1 détermine si "r+∑Nj" est supérieur ou égal à I, I étant le nombre de mots binaires circulant en parallèle sur les bus Bi ou encore le nombre de bus Bi. Si la réponse est positive, le circuit CCT1 va à l'étape C03, sinon sort de la boucle et va à l'étape B07. A l'étape C03, le circuit CCT1 vérifie que le signal RDY1 a été émis par l'unité U0, sinon attend que ce signal soit reçu. Lorsque le signal RDY1 est reçu, le circuit CCT1 va à l'étape C04 où il exécute les opérations suivantes : - le circuit CCT1 charge dans le registre RI ou dans le registre R2 le nouvel ensemble de mots binaires fourni par l'unité UO. Le premier registre mis à jour au cours de l'étape C04 après les étapes d'initialisation B01 et B03 est le registre RI . Ensuite, lors d'une nouvelle exécution de l'étape C04, le circuit CCT1 charge le registre R2, et ainsi de suite de manière que les registres RI , R2 soient mis à jour en alternance,

- le circuit CCT1 envoie le signal ACK1 à l'unité UO,

- le circuit CCT1 met à jour la variable r au moyen de la relation "r = (r +∑Nj) mod I". Ainsi, la nouvelle valeur de r est égale au reste de la division modulaire de la somme de sa valeur précédente et de la variable∑Nj. Après cette mise à jour, la variable r représente le nombre de décalages au-delà de I ou d'un multiple de I ayant été appliqués aux données figurant dans les registres RI, R2, - le circuit CCT1 met à zéro la variable∑Nj. Les décalages successifs modulo I depuis la dernière remise à zéro de cette variable sont en effet désormais inclus dans la nouvelle valeur de r.

La figure 4 montre également des étapes P00 à P02 conduites par l'unité Ul . Au cours d'une étape P00, l'unité Ul attend de recevoir le signal RDY2. Lorsque ce signal est reçu, l'unité Ul exécute une étape P01 où elle lit Nj mots binaires wi parmi l'ensemble de mots binaires fourni par le registre R3 de l'unité BDG, et envoie le signal ACK2(Nj) au circuit CCT1. Au cours d'une étape P02, l'unité Ul traite les données lues, puis retourne à l'étape P00 pour vérifier que le signal RDY2 a été réémis par le circuit CCT1 ou attendre que ce signal soit réémis avant de réitérer l'étape P01.

Dans un mode de réalisation, le nombre de mots binaires nécessaire à l'exécution de l'étape de traitement P02 peut être supérieur à I. Dans ce cas, l'unité Ul lit plusieurs fois ses entrées Eo à En avant de traiter les données lues. Par exemple, l'unité Ul lit successivement plusieurs ensembles de I données en renvoyant après chaque lecture la valeur Nj=I, puis, lors d'une dernière étape de lecture, lit Nj mots binaires avec Nj < I de l'ensemble de mots binaires qui lui est fourni. Ainsi, l'unité Ul exécute les étapes P00 et P01 plusieurs fois avant d'exécuter l'étape de traitement P02.

Dans un autre mode de réalisation, l'unité Ul renvoie au circuit CCT1 un nombre Nj inférieur au nombre de mots binaires lus sur ses entrées, afin que certains mots binaires lus soient de nouveau présentés sur ses entrées pour la prochaine étape de lecture. Ce mode de réalisation met en évidence le fait que le nombre Nj constitue, par essence, une instruction de purge de certains mots binaires de l'ensemble de mots binaires initialement présenté à l'unité NI, plutôt qu'une information sur le nombre de mots binaires que l'unité Ul a lus.

Dans d'autres modes de réalisation, l'unité Ul peut être un circuit dans lequel des données sont écrites. Le nombre Nj représente alors le nombre de mots binaires écrits dans l'unité Ul . Le terme "lire des mots binaires" utilisé ici et dans les revendications pour désigner une opération de réception et de traitement de mots binaires par l'unité Ul, peut donc également correspondre à une opération de réception de mots binaires qui sont écrits dans l'unité Ul . Les entrées à plus haute priorité de lecture sont alors des entrées à plus haute priorité d'écriture. Le terme "lecture" doit donc être compris au sens large comme désignant une opération de réception de données pour un traitement déterminé qui peut correspondre à une écriture des données dans l'unité Ul .

Un autre mode de réalisation de l'unité Ul peut mettre en œuvre un procédé de mise en correspondance des données sans hiérarchisation des entrées. L'unité Ul fournit alors à l'unité BDG, au lieu du nombre Nj, une information sur les mots binaires wi dont elle n'a plus besoin (données à purger). Ces mots binaires ne sont pas nécessairement de rangs "i" adjacents. L'unité Ul peut également indiquer dans quel ordre les I-Nj mots binaires n'ayant pas été lus (ou qui ont été lus mais qu'elle souhaite de nouveau recevoir) doivent être appliqués à ses entrées. Dans un tel mode de réalisation, le circuit BS est un circuit à réorganisation de données de type "transversal" ("crossbar ") pouvant relier n'importe quelle de ses entrées à n'importe quelle de ses sorties.

La séquence de mise en correspondance décrite plus haut est illustrée sur la figure 5 avec indication des étapes correspondantes exécutées parmi les étapes susdécrites B00-B08, C00-C04. "I" est comme précédemment supposé égal à 8. La figure 5 est décrite en Annexe, qui fait partie intégrante de la description.

Dans encore d'autres modes de réalisation, l'unité de mise en correspondance BDG peut être configurée pour réaliser l'étape C04 en tant qu'étape de préchargement ("prefetch") avant que le nombre Nj ne soit reçu, afin de réduire le nombre de cycles d'horloge nécessaire au transfert des données de l'unité U0 à l'unité Ul . Cette étape de préchargement peut être assurée en ajoutant un troisième registre d'entrée en parallèle avec les registres RI R2 et dont les sorties sont reliées à des entrées supplémentaires du circuit à décalage circulaire BS. De nouvelles données peuvent être préchargées dans l'un des trois registres d'entrée sans attendre de savoir quelles sont les données présentes dans les deux autres registres qui ont été lues par l'unité Ul . Dans un autre mode de réalisation, les sorties du registre R3 sont renvoyées sur des entrées supplémentaires du circuit BS. S'il s'avère à réception du nombre Nj que des données présentes dans registre R3 n'ont pas été lues par l'unité Ul mais ne sont plus présentes dans leur registre d'origine RI, R2 car son contenu a été renouvelé, ces données peuvent être renvoyées au circuit BS à partir du registre R3 pour être rechargées dans le registres R3 après décalage et combinaison avec de nouvelles données.

La figure 6 représente des étapes d'un procédé de réalisation d'un circuit FPGA selon l'invention. On distingue :

- une étape FOI de description de la fonction de traitement de données visée (description fonctionnelle) dans un langage à haut niveau d'abstraction et en utilisant une variable non typée,

- une étape F02 de définition des contraintes matérielles du circuit, notamment le nombre de bus parallèles, la fréquence d'horloge ou les fréquences d'horloge si le dispositif comprend des blocs de traitement ayant des fréquences d'horloges différentes, etc.,

- une étape F03 de compilation de la description fonctionnelle dans une architecture cible utilisant une unité BDG selon l'invention, en tenant compte des contraintes matérielles, pour obtenir une description matérielle HDL du dispositif, ou circuit HDL.

- une étape F04 de configuration du circuit FPGA par synthèse logique et placement routage du circuit HDL, pour l'obtention d'un flot de données de configuration ("bitstream") qui est chargé dans la mémoire du circuit FPGA pour obtenir un circuit FPGA opérationnel.

Au cours d'une étape F05, le circuit FPGA est testé dans des conditions réelles de fonctionnement ou dans un environnement de simulation. Le procédé de réalisation s'achève à une étape F06 si le circuit est jugé satisfaisant. Dans la négative, on revient à l'étape F02 pour redéfinir les contraintes matérielles. Cette étape peut comprendre le fait de définir un nombre différent de bus parallèles, par exemple pour augmenter le degré de parallélisme du dispositif. Grâce à l'utilisation d'une unité de mise en correspondance (ou d'une pluralité d'unités de mise en correspondance en amont de plusieurs unités de traitement pouvant être concernées par le redimensionnement du circuit) cette étape ne nécessite pas de modifier la description fonctionnelle du circuit. En d'autres termes, il n'est pas nécessaire de retourner à l'étape FOI . Les étapes F03 de compilation et d'obtention d'une description matérielle, et F04 de synthèse logique et placement routage, sont exécutées sur la base de la nouvelle définition des contraintes matérielles. Au terme de l'étape de test F05, un nouveau cycle d'optimisation comprenant les étapes F02, F03, F04 peut éventuellement être conduit et ce jusqu'à obtention d'une configuration optimale du circuit FPGA.

Le procédé de réalisation qui vient d'être décrit est illustré sur les figures 7A, 7B, 7C. Ces figures montrent trois variantes DV2a, DV2b, DV2c du dispositif DV2 réalisant la même fonction de traitement mais présentant des degrés de parallélisme différents retenus à l'étape F02 de définition des contraintes matérielles. Le dispositif DV2a présente une architecture à deux bus parallèles, le dispositif DV2b une architecture à quatre bus parallèles et le dispositif DV2c une architecture à huit bus parallèles. L'unité Ul est désignée respectivement Ula, Ulb, Ulc et l'unité BDG est désignée respectivement BDGa, BDGb, BDGc dans chacune des variantes.

Dans le mode de réalisation choisi ici à titre d'exemple, l'unité Ul (Ula, Ulb, Ulc) est un circuit à huit entrées E0 à E7 pouvant calculer la valeur moyenne de données fournies sur toute ou partie de ses entrées. Selon une hypothèse prise ici à titre d'exemple et faisant partie de la définition fonctionnelle du dispositif DV2, l'unité Ul est configurée ici pour calculer la valeur moyenne de 6 mots binaires fournis sur ses entrées. L'unité Ul comprend à cet effet un circuit de contrôle CCT2 (CCT2a, CCT2b, CCT2c), une banque de 8 registres d'entrée rO, rl, r2... r7, l'entrée de chaque registre formant une entrée E0, El, E2...E7 de l'unité Ul . Le circuit de contrôle CCT2 commande le chargement des registres rO à r7 au moyen de signaux de chargement LDOl à LD07. Les sorties des registres sont appliquées à un additionneur ADD. La sortie de l'additionneur ADD est appliquée à un circuit diviseur DIV/N configuré ici en diviseur par 6 (DIV/6) dont la sortie fournit le résultat R du calcul de valeur moyenne.

Dans la variante DV2a, figure 7 A, l'unité Ula est reliée à une unité de mise en correspondance BDGa ayant deux sorties S0, SI et deux entrées reliées à deux sorties d'une unité UOa de fourniture de données. Les entrées E0, El, E2 des registres rO, rl, r2 sont reliées à la sortie S0 et les entrées E4, E5, E6 des registres r4, r5, r6 sont reliées à la sortie SI . Les registres r3, r7 et leur signaux de chargement LD03, LD07 ne sont pas utilisés. Ces registres peuvent être supprimés, ou être reliés aux sorties S0, SI et leur contenu maintenu à 0. Lorsque le dispositif DV2a est en opération, l'unité Ula reçoit de l'unité BDGa des ensembles W, W, W" de deux mots binaires et le circuit CCT2a renvoie après chaque chargement de deux mots binaires la commande ACK2(Nj) avec Nj=2. Des mots wO et wl de l'ensemble W sont chargés dans les registres rO et r4, des mots wO', wl' de l'ensemble W sont chargés dans les registres rl, r5 et des mots wO", wl" de l'ensemble W" sont chargés dans les registres r2, r6. Le circuit CCT2a active ensuite le diviseur DIV/6 qui fournit le résultat R de la valeur moyenne.

Dans la variante DV2b, figure 7B, l'unité Ulb est reliée à une unité de mise en correspondance BDGb ayant quatre sorties S0, SI, S2, S3 et quatre entrées reliées à quatre sorties d'une unité UOb de fourniture de données. Les entrées E0, El des registres rO, rl sont reliées à la sortie S0, les entrées E2, E3 des registres r2, r3 sont reliées à la sortie SI , l'entrée E4 du registre r4 est reliée à la sortie S2 et l'entrée E6 du registre r6 est reliée à la sortie S3. Les registres r5, r7 et leur signaux de chargement LD05, LD07 ne sont pas utilisés. Ces registres peuvent être supprimés ou être reliés aux sorties S2, S3 et leur contenu maintenu à 0.

Lorsque le dispositif DV2b est en opération, l'unité Ulb reçoit de l'unité BDGb des ensembles W, W de quatre mots binaires. Le circuit CCT2b charge les mots wO, wl, w2, w3 de l'ensemble W dans les registres rO, r2, r4, r6 et renvoie la commande ACK2(Nj) avec Nj=4. Le circuit CCT2b charge ensuite des mots wO', wl' de l'ensemble W dans les registres rl, r3 et renvoie la commande ACK2(Nj) avec Nj=2. Le circuit CCT2b active ensuite le diviseur DIV/6 qui fournit le résultat R de la valeur moyenne. Sur réception de la commande ACK2(2), l'unité BDGb décale sur ses sorties S0, SI la position de deux mots non lus w2', w3' du second ensemble de mot W, initialement présentés sur ses sorties S2, S3, et présente sur ces dernières des mots d'un nouvel ensemble de mots reçu.

Dans la variante DV2c, figure 7C, l'unité Ulc est reliée à une unité de mise en correspondance BDGc ayant huit sorties S0, SI, S2, S3, S4, S5, S6, S7 et huit entrées reliées à huit sorties d'une unité UOc de fourniture de données. Les entrées E0, El, E2, E3, E4, E5 des registres rO, rl, r2, r3, r4, r5 sont reliées aux sorties S0, SI, S2, S3, S4, S5, respectivement. Les registres r6, r7 et leur signaux de chargement LD06, LD07 ne sont pas utilisés. Ces registres peuvent être supprimés ou être reliés aux sorties S6, S7 et leur contenu maintenu à 0. Lorsque le dispositif DV2c est en opération, l'unité BDGc fournit à l'unité Ulc des ensembles W de huit mots binaires. Le circuit CCT2c charge 6 mots binaires wO à w5 dans les registres rO à r5 et renvoie la commande ACK2(Nj) avec Nj=6. Sur réception de la commande ACK2(6), l'unité BDGc décale la position de deux mots non lus w6, w7 de l'ensemble de mot W, initialement présentés sur ses sorties S6, S7, sur ses sorties S0, SI, et présente sur les sortie S2 à S7 des mots d'un nouvel ensemble de mots reçu.

Grâce à l'utilisation de l'unité BDG prises dans ses variantes BDGa, BDGb, BDGc, les trois variantes correspondantes DV2a, DV2b, DV2c du dispositif DV2 sont générées à partir de la même description fonctionnelle. Par exemple, en référence à la figure 6, la variante DV2a a été réalisée au cours des étapes F03 et F04 après avoir choisi, au cours de l'étape F02, une architecture à deux bus parallèles. La variante DV2b a été réalisée au cours des étapes F03 et F04 après que l'étape de test F05 a montré que l'architecture à deux bus de la variante DV2a n'était pas optimale, et après retour à l'étape F02 pour augmenter le nombre de bus parallèles, ainsi qu'éventuellement d'autres variables telle que la fréquence d'horloge. La variante DV2c a été réalisée après que l'étape de test F05 a montré que l'architecture à quatre bus parallèles de la variante DV2b n'était pas optimale, ou pour d'autres raisons, par exemple parce que le test d'autres parties du circuit a montré qu'une architecture à huit bus parallèles était souhaitable également sur cette partie du circuit FPGA.

En l'absence de l'unité BDG, le procédé de réalisation du circuit FPGA montré sur la figure 6 devrait inclure un retour à l'étape FOI pour réécriture de la description fonctionnelle de l'unité Ul, prenant en compte la réception par 2, 4 ou 8 bits des six mots binaires nécessaires au calcul d'une valeur moyenne par l'unité Ul . Comme indiqué plus haut, il y aurait alors "contamination" des contraintes matérielles sur la définition fonctionnelle.

Selon un aspect de certains modes de réalisation de l'invention, on ajoute une instruction de déclaration d'une variable non typée, c'est-à-dire de taille non spécifiée, au langage de programmation à haut niveau d'abstraction utilisé à l'étape FOI . Le compilateur HLS met en œuvre la variable non typée au cours de l'étape F03 en utilisant une architecture cible comprenant l'unité de mise en correspondance BDG et en configurant l'unité BDG ainsi que l'unité Ul en fonction du nombre de bus parallèles, pour obtenir les configurations BDGa, BDGb, BDGc et Ula, Ulb, Ulc susdécrites. Les contraintes matérielles peuvent ainsi être modifiées après la phase de test F05 sans nécessiter une réécriture de la description de la fonction exécutée par l'unité Ul puisque cette fonction est indépendante de la structure matérielle de l'unité Ul grâce à l'utilisation de la variable non typée.

Le programme en pseudo-langage C ci-dessous est un exemple de description fonctionnelle de la fonction de calcul d'une valeur moyenne exécutée par l'unité Ul du dispositif DV2 (DV2a, DV2b, DV2c). L'instruction permettant de déclarer une variable non typée est désignée t untyped dans cet exemple et "bus" constitue donc la variable d'entrée du programme, qui est non typée. "StaticAverage" est une fonction dont le retour est de type "int" (soit integer" soit un nombre entier). "ReadBus" est une fonction complémentaire de lecture de la variable non typée. Les variables "sample", "sum" et "count" sont des entiers ("int"). N est un entier de valeur constante ("const int"). int StaticAverage (t_untyped bus)

{

int sample;

int sum = 0;

int count = 0;

const int N = 6;

while (count < N) {

sample = ReadBus(bus);

sum = sum + sample;

count = count + 1 ;

}

return sum/count;

}

Le programme exécute une fonction de moyennage qui lit des échantillons ("samples") jusqu'à une condition d'arrêt "while". A chaque itération du "while", le programme lit un échantillon ("ReadBus(bus)"), puis accumule les échantillons ("sum = sum + sample") et incrémente un compteur du nombre d'échantillons ("count = count + 1"). A la fin de la boucle du "while" (condition d'arrêt rencontrée), le programme calcule la moyenne ("sum/count"). S'agissant ici d'une fonction de moyennage statique ("StaticAverage"), la condition d'arrêt est "le nombre d'échantillons est égal à 6" ("while (count < N)"). De façon similaire, peut être prévue une fonction "WriteBus" d'écriture de la variable non typée. Le programme est écrit sans connaître le degré de parallélisme dont disposera le dispositif matériel exécutant ce programme. Il est donc indépendant de l'architecture matérielle, qui peut être modifiée après la phase de test F05 jusqu'à trouver le nombre de bus parallèle optimal pour l'application visée. Le compilateur HLS du langage C met en œuvre la variable BUS et son instruction de lecture READ (BUS) au moyen de l'unité de mise en correspondance BDG, et en configurant l'unité BDG et l'unité Ul de manière appropriée au degré de parallélisme retenu (par exemple l'une des configurations BDGa, BDGb, BDGc) (par exemple l'unité Ul de manière appropriée.

La figure 8 représente encore un exemple de réalisation DV2d du dispositif DV2 dans lequel l'unité Ul est comme précédemment un circuit de calcul de la valeur moyenne de données fournies sur ses entrées E 0 à En . L'unité Ul comprend l'additionneur ADD, un circuit de contrôle CCT2d, une banque de I registres d'entrée r 0 à rn dont les entrées sont reliées à des sorties correspondantes d'une unité de mise en correspondance BDGd et dont les sorties sont appliquées à l'additionneur ADD. La sortie de l'additionneur ADD est appliquée à un circuit diviseur DIV/N dont la sortie fournit le résultat R du calcul de la valeur moyenne de N mots binaires. Le nombre N est ici une variable fournie au diviseur DIV/N par le circuit de contrôle CCT2d. Le circuit CCT2d applique également à la banque de registres r 0 à ¾ des signaux de chargement LD01-LDi_i qui sont fonction de N. Le circuit CCT2d surveille par exemple l'évolution de la valeur du résultat R et détermine, après chaque étape de calcul d'une valeur moyenne, le nombre N de mots binaires nécessaire au calcul de la prochaine valeur moyenne. Dans une variante, le circuit CCT2 reçoit la variable N de l'extérieur, en tant que valeur de consigne externe. Après chaque étape de lecture, le nombre Nj=N est fourni à l'unité BDG dans la commande ACK2(Nj) ou en tant que commande ACK2(Nj).

Le programme en pseudo-langage C ci-dessous est un exemple de description fonctionnelle de la fonction de calcul d'une valeur moyenne exécutée par l'unité Ul du dispositif DV2d de la figure 8 : int DynamicAverage (t_untyped bus)

{

int sample;

int sum = 0: int count = 0;

const int max = 1000;

while (sum < max) {

sample = ReadBus(bus);

sum = sum + sample;

count = count + 1 ;

}

return sum/count;

}

Ce programme diffère du précédent en ce qu'il définit une fonction de moyennage dynamique "(DynamicAverage") avec une condition d'arrêt qui est "la somme des échantillons est inférieure à 1000" ("while (sum < max)"). Le nombre d'échantillons lus pour calculer une valeur moyenne dépend ainsi de leur valeur. En supposant que les échantillons soient non nuls, le pire cas considéré est 1000 échantillons égaux à 1. Ce programme est donc du type à "comportement dépendant des données" ("data-dependent behavior").

Outre les circuits intégrés à réseau de portes programmables FPGA ("Field Programmable Gâte Array"), un dispositif à traitement parallélisé de données selon l'invention peut être réalisé sous forme de circuit intégré par l'intermédiaire d'autres filières technologiques connues, notamment la filière des ASICs ("Application Spécifie Integrated Circuits, soit "Circuits Intégrés Propres à une Application"). Le dispositif qui vient d'être décrit présente un avantage particulier dans le cadre d'une mise en œuvre sous forme de circuit FPGA, qui permet l'ajustement de la taille des bus.

La figure 9 montre un mode de réalisation du dispositif DV2 dans lequel l'unité U0 est un circuit d'adaptation du nombre de bus parallèles et de fréquences d'horloge. En sus de ses sorties reliées à l'unité BDG, l'unité U0 comporte K entrées E 0 à E K -i reliées à une unité U2 qui comporte K sorties So à S K - I , K étant différent du nombre I de sorties de l'unité U0. L'unité U2 est par ailleurs cadencée par un signal d'horloge CK2 différent d'un signal d'horloge CK1 appliqué aux unités BDG et Ul . L'unité U0 fait le lien entre ces deux domaines d'horloge ayant des degrés de parallélisme différents, et transforme des ensembles de mots binaires wo à W K - I en des ensembles de mots binaires wo à wi_i . A cet effet, l'unité U0 utilise une pile FIFO ("Premier Entré Premier Sorti") pour le redimensionnement des ensembles de mots binaires, reçoit les signaux d'horloge CK1, CK2 de chaque domaine d'horloge et contrôle l'échange de données avec l'unité U2 en recevant de celle-ci un signal RDY3 et en lui renvoyant un signal d'accusé de réception ACK3. De façon générale, l'unité U0 peut être tout type de circuit d'interface fournissant des données parallèles, notamment un port d'entrée du dispositif. L'unité Ul peut également être une mémoire, ou une autre unité de traitement de données, ou un circuit d'adaptation de domaines d'horloges et/ou de degrés de parallélisme tel que représenté sur la figure 9. Un dispositif selon l'invention peut comprendre une pluralité d'unités de traitement reliées à un même ensemble de bus de données et équipées chacune d'une unité de mise en correspondance de données BDG lui permettant d'ajuster sa "consommation" de données parallèles sans se soucier du nombre de données véhiculées simultanément par l'ensemble de bus. Bien que l'unité de mise en correspondance ait été décrite dans ce qui précède comme un bloc distinct de l'unité de traitement, celle-ci peut en pratique être intégrée dans l'unité de traitement, les entrées de l'unité de mise en correspondance formant alors les entrées de l'unité de traitement.

Annexe

Description de la figure 5

Initialisation de l'unité BDG

Les ensembles de mots binaires Wl et W2 sont chargés dans les registres RI, R2, le circuit à décalage circulaire BS reçoit sur ses 2*1 entrées les contenus concaténés des deux registres :

R1//R2 = aO al a2 a3 a4 a5 a6 a7 bO bl b2 b3 b4 b5 b6 b7

Le circuit CCT1 met le signal SHIFT à 0 et charge dans le registre R3 l'ensemble Wl :

R3 = aO al a2 a3 a4 a5 a6 a7

Les variables r et∑Nj sont mises à 0 (r = 0,∑Nj = 0). Première étape de lecture : - l'unité Ul lit les mots binaires aO à a4 et renvoie la valeur NI =5 au circuit CCTl au moyen du signal d'accusé de réception ACK2(5),

- le circuit CCTl met à jour la variable∑Nj :∑Nj =∑Nj + Nj = 5,

- le circuit CCTl exécute le test sur la valeur de r+∑Nj : r+∑Nj = 5 ^ 8.

Comme la variable r+∑Nj n'est pas supérieure ou égale à 8, le circuit CCTl sort de la boucle de mise à jour des registres RI, R2 et applique la commande SHIFT = 5 au circuit BS (étape B07), puis charge le registre R3 avec les mots binaires sélectionnés dans les registres RI, R2 par le circuit BS (étape B08), soit :

R3 = a5, a6, a7, bO, bl, b2, b3, b4

Seconde étape de lecture : - l'unité Ul lit les mots binaires a5, a6, a7, bO et renvoie la valeur N2=4 au circuit CCTl au moyen du signal d'accusé de réception ACK2(4),

- le circuit CCTl met à jour la variable∑Nj :∑Nj =∑Nj + Nj = 5 + 4 = 9,

- le circuit CCTl exécute le test sur la variable r+∑Nj : r+∑Nj = 0 + 9 = 9 > 8. Comme la variable r+∑Nj est supérieure ou égale à 8 : i) le circuit CCTl charge le nouvel ensemble de mots binaires W3 dans le registre RI . Le circuit à décalage circulaire BS reçoit les contenus concaténés des deux registres : R1//R2 = cO cl c2 c3 c4 c5 c6 c7 bO bl b2 b3 b4 b5 b6 b7 ii) le circuit CCTl met à jour la variable r : r = (r +∑Nj) mod 8 = 9 mod 8 = 1, iii) le circuit CCTl met la variable∑Nj à 0.

Le circuit CCTl sort ensuite de la boucle de mise à jour des registres RI , R2 et applique la commande SHIFT = 4 au circuit BS (étape B07), puis charge le registre R3 avec les mots binaires sélectionnés dans les registres RI, R2 par le circuit BS (étape B08), soit :

R3 = bl, b2, b3, b4, b5, b6, b7, cO Il sera noté que le circuit BS exécute la commande SHIFT de manière à ce que le contenu des deux registres soit considéré comme une chaîne de bits ininterrompue qui serait stockée dans une suite ininterrompue de registres concaténés R1//R2//R3//R4//R5... dans laquelle R3 est le registre RI ayant reçu un premier nouvel ensemble de mots binaires, le registre R4 est le registre R2 ayant reçu un nouvel ensemble de mots binaires, le registre R5 est le registre RI ayant reçu un second nouvel ensemble de mots binaires, etc. Ainsi, lorsque le cumul des valeurs des signaux SHIFT appliqués au circuit BS dépasse la taille des deux registres, le décalage est exécuté en considérant que le premier bit du registre RI, ici le bit cO, suit le dernier bit du registre R2.

Troisième étape de lecture :

- l'unité Ul lit les mots binaires bl à b7 et cO, et renvoie la valeur N3 ! au circuit CCTl moyen du signal d'accusé de réception ACK2(8),

- le circuit CCTl met à jour la variable∑Nj :∑Nj =∑Nj + Nj = 0 + 8 8,

- le circuit CCTl exécute le test sur la variable r+∑Nj : r+∑Nj = 1 + 8 9 > 8,

Comme la variable r+∑Nj est supérieure ou égale à 8 : i) le circuit CCTl charge le nouvel ensemble de mots binaires W4 dans le registre R2. Le circuit à décalage circulaire BS reçoit les contenus concaténés des deux registres :

R1//R2 = cO cl c2 c3 c4 c5 c6 c7 dO dl d2 d3 d4 d5 d6 d7 ii) le circuit CCTl met à jour la variable r : r = (r +∑Nj) mod 8 = 9 mod 8 = 1,

iii) le circuit CCTl met la variable∑Nj à 0.

Le circuit CCTl sort ensuite de la boucle de mise à jour des registres RI , R2 et applique la commande SHIFT = 8 au circuit BS (étape B07), puis charge le registre R3 avec les mots binaires sélectionnés dans les registres RI, R2 par le circuit BS (étape B08), soit :

R3 = cl, c2, c3, c4, c5, c6, c7, dO

Quatrième étape de lecture : - l'unité Ul lit les mots binaires cl à cl, et renvoie la valeur N4=7 au circuit CCTl au moyen du signal d'accusé de réception ACK2(7),

- le circuit CCTl met à jour la variable∑Nj :∑Nj =∑Nj + Nj = 0 + 7 = 7,

- le circuit CCTl exécute le test sur la variable r+∑Nj : r+∑Nj = l + 7 = 8 > 8,

Comme la variable r+∑Nj est supérieure ou égale à 8 : i) le circuit CCTl charge le nouvel ensemble de mots binaires W5 dans le registre RI . Le circuit à décalage circulaire BS reçoit les contenus concaténés des deux registres :

R1//R2 = eO el e2 e3 e4 e5 e6 e7 dO dl d2 d3 d4 d5 d6 d7 ii) le circuit CCTl met à jour la variable r : r = (r +∑Nj) mod 8 = 8 mod 8 = 0,

iii) le circuit met variable∑Nj à 0.

Le circuit CCTl sort ensuite de la boucle de mise à jour des registres RI , R2 et applique la commande SHIFT = 7 au circuit BS (étape B07), puis charge le registre R3 avec les mots binaires sélectionnés dans les registres RI, R2 par le circuit BS (étape B08), soit : R3 = dO, dl, d2, d3, d4, d5, d6, d7

Cinquième étape de lecture :

- l'unité Ul lit les mots binaires dO à d5 et renvoie la valeur N5=6 au circuit CCTl au moyen du signal d'accusé de réception ACK2(6),

- le circuit CCTl met à jour la variable∑Nj :∑Nj =∑Nj + Nj = 0 + 6 = 6,

- le circuit CCTl exécute le test sur la variable r+∑Nj : r+∑Nj = 0 + 6 = 6 ^ 8,

Comme la variable r+∑Nj n'est pas supérieure ou égale à 8, le circuit CCTl sort de la boucle de mise à jour des registres RI, R2 et applique la commande SHIFT = 6 au circuit BS (étape B07), puis charge le registre R3 avec les mots binaires sélectionnés dans les registres RI, R2 par le circuit BS (étape B08), soit :

R3 = d6, d7, eO, el, e2, e3, e4, e5