FR 3019919 A1 20151016 FR 1453308 A 20140414 Procédé de synthèse automatique de circuits, dispositif et programme d'ordinateur associés La présente invention concerne un procédé de synthèse automatique de circuits comprenant une étape de compilation d'un programme logiciel en un réseau de processus réguliers interconnectés à l'aide de canaux, selon lequel chaque canal est une mémoire physique adressable, chacun desdits processus applique, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement fournit, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution. De tels procédés de synthèse de circuits, ou HLS, (en anglais « high-level synthesis »), sont utilisés pour générer automatiquement (ou compiler) un bloc de circuits électroniques à partir d'une description algorithmique (haut niveau telle que le langage C ou Matlab, Alpha) du calcul à effectuer par le circuit (cf. des outils tels que SpecC, HardwareC, HandelC, BashC, TransmogrifierC, CyberC, CatapultC). Les algorithmes concernés sont divers, par exemple des algorithmes de traitement du signal. Le circuit doit être le plus efficace possible tout en utilisant au mieux les ressources disponibles. Les performances des blocs de circuits générés sont ainsi mesurées notamment par la vitesse de traitement des données fournies en entrée, par la consommation énergétique, la surface de silicium occupée, unités LUT sur FPGA, accès mémoire etc. Une augmentation des performances est obtenue en divisant le traitement à effectuer en tâches à réaliser en parallèle. La plupart du temps, les tâches ne sont pas totalement indépendantes, et doivent communiquer (écrire/lire) des résultats intermédiaires entre elles, ce qui pose notamment le problème de la synchronisation des tâches entre elles. Le découpage en tâches parallèles et la production des synchronisations nécessitent un ordonnancement à grain fin du calcul, c'est-à-dire une réorganisation de l'ordre d'exécution des opérations de l'algorithme. Pour être correct, un ordonnancement doit respecter les dépendances de données entre opérations, pour assurer, par exemple, qu'une donnée est produite avant d'être lue. La plupart des approches existantes s'appuient sur une représentation de type CDFG (Control/Data Flow Graph), qui expriment des dépendances entre constructions syntaxiques, c'est-à-dire entre paquets d'opérations, ce qui mène à une sur-approximation grossière des dépendances telle qu'un ordonnancement intéressant ne peut être trouvé. Les réseaux de processus sont des modèles d'exécution qui expriment naturellement le parallélisme d'un calcul. A ce titre, ils sont utilisés pour représenter des systèmes parallèles, et ces traductions de systèmes parallèles en réseaux de processus permettent d'étudier, analyser et mesurer différentes problématiques liées au parallélisme (ordonnancement, équilibrage de charge, allocation, checkpointing, consommation, etc). Les réseaux de processus constituent en outre une représentation intermédiaire naturelle pour un dispositif de synthèse automatique de circuits, dans lequel un bloc « Front-End » extrait le parallélisme et produit un réseau de processus, et un bloc « Back- End » compile le réseau de processus vers l'architecture cible. Si de nombreuses avancées en termes de performances ont été réalisées sur les aspects back-end (construction des pipelines, placement/routage), les aspects front-end restent encore rudimentaires. Il est ainsi souhaitable d'augmenter encore les performances des blocs de circuits générés automatiquement. A cet effet, suivant un premier aspect, l'invention propose un procédé de synthèse automatique de circuits du type précité caractérisé en ce qu'il comprend les étapes suivantes, lors de l'étape de compilation, pour chacun desdits canaux : un unique processus, dit processus producteur, est autorisé à écrire des données dans le canal et un unique processus, dit processus consommateur, est autorisé à lire des données dans ledit canal ; et une unité de synchronisation est associée audit canal, et telle qu'elle collecte, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur de ladite nouvelle itération du processus producteur, et collecte, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur ; ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processus producteur, respectivement consommateur, autorisant ou gelant la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur , respectivement producteur. Un tel procédé permet de générer rapidement et de manière automatique des circuits offrant de grandes performances en terme de vitesse de calcul et de volume occupé par le circuit. Dans des modes de réalisation, le procédé de synthèse automatique de circuit suivant l'invention comporte en outre une ou plusieurs des caractéristiques suivantes : - ladite unité de synchronisation est telle qu'elle pilote le fonctionnement du processus producteur dudit canal en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération dudit processus producteur : l'unité de synchronisation compare la nouvelle position d'exécution de ladite valeur collectée, à la position d'exécution de la dernière valeur d'itération du processus consommateur collectée ; et ladite unité de synchronisation gèle la mise en oeuvre par le processus producteur de cette nouvelle itération si la position d'exécution de cette nouvelle itération est postérieure à la position d'exécution de la dernière valeur d'itération collectée du processus consommateur, le gel étant maintenu par l'unité de synchronisation jusqu'à la collecte d'une future valeur d'itération du processus consommateur telle que la position d'exécution de cette future valeur d'itération soit postérieure à ladite position d'exécution de la nouvelle itération du processus consommateur ; ladite unité de synchronisation est telle qu'elle pilote le fonctionnement du processus consommateur dudit canal en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération dudit processus consommateur : l'unité de synchronisation détermine la position d'exécution de celle des valeurs d'itération du processus producteur qui donne lieu à l'écriture dans ledit canal (c) de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération ; et ladite unité de synchronisation gèle la mise en oeuvre par le processus consommateur de sa nouvelle itération si la position d'exécution déterminée est postérieure ou égale à la position d'exécution de la dernière valeur d'itération collectée du processus producteur, le gel étant maintenu par l'unité de synchronisation jusqu'à la collecte d'une future valeur d'itération du processus producteur telle que la position d'exécution de cette future valeur d'itération soit supérieure strictement à ladite position d'exécution déterminée. le processus consommateur ou producteur de chaque canal après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivre à l'unité de synchronisation du canal, la valeur d'itération de la nouvelle itération du processus, et met en oeuvre cette nouvelle itération du processus en fonction d'une commande de pilotage de l'unité de supervision indiquant un gel ou une autorisation ; - le processus consommateur du canal après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivre en outre à l'unité de synchronisation du canal, ladite valeur d'itération du processus producteur qui donne lieu à l'écriture dans ledit canal de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération. Suivant un deuxième aspect, la présente invention propose un dispositif de synthèse automatique de circuits adapté pour effectuer une compilation d'un programme logiciel en générant un réseau de processus réguliers interconnectés à l'aide de canaux, dans lequel chaque canal est une mémoire physique adressable, chacun desdits processus étant adapté pour appliquer, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement étant adaptée pour fournir, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution ; ledit dispositif de synthèse de circuits étant caractérisé en ce qu'il est adapté pour lors de ladite compilation, générer et associer à chacun desdits canaux : un unique processus, dit processus producteur, autorisé à écrire des données dans le canal et un unique processus, dit processus consommateur, autorisé à lire des données dans ledit canal ; et une unité de synchronisation associée audit canal et adaptée pour collecter, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur de ladite nouvelle itération du processus producteur, et collecter, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur ; ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processus producteur, respectivement consommateur, étant adaptée pour autoriser ou geler la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur, respectivement producteur. Suivant un troisième aspect, la présente invention propose un circuit synthétisé par exemple suite à la mise en oeuvre d'un procédé de synthèse automatique de circuit selon le premier aspect de l'invention, comprenant un réseau de processus réguliers interconnectés à l'aide de canaux, dans lequel chaque canal est une mémoire physique adressable, chacun desdits processus étant adapté pour appliquer, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement étant adaptée pour fournir, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution ; ledit circuit étant caractérisé en ce qu'il comprend : un unique processus, dit processus producteur, associé à chaque canal et autorisé à écrire des données dans le canal et un unique processus, dit processus consommateur, associé à chaque canal et autorisé à lire des données dans ledit canal ; et une unité de synchronisation associée audit canal et adaptée pour collecter, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur de ladite nouvelle itération du processus producteur, et collecter, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur ; ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processus producteur, respectivement consommateur, étant adaptée pour autoriser ou geler la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur, respectivement producteur. Ces caractéristiques et avantages de l'invention apparaîtront à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple, et faite en référence aux dessins annexés, sur lesquels : la figure 1 représente un dispositif de synthèse automatique de circuits dans un mode de réalisation de l'invention ; la figure 2 illustre les domaines d'itération et de dépendances du programme nommé Prog ; - la figure 3 illustre l'ordre d'exécution du programme Prog ; la figure 4 est une vue de processus, multiplexeurs d'entrée, démultiplexeurs de sortie, canaux mis en oeuvre dans la génération automatique du bloc de circuits exécutant la programme Prog ; la figure 5 est une vue représentant deux processus du programme Prog, du canal entre ces deux processus et de l'unité de synchronisation associée au canal. La figure 1 est une vue d'un dispositif 1 de synthèse automatique de circuits haut- niveau dans un mode de réalisation de l'invention. Ce dispositif 1 comporte un bloc 2, dit « Front-End » et un bloc 3, dit « Back-End ». Le bloc « Front-End » 2 analyse la description algorithmique d'un programme fourni en entrée du dispositif 1 pour en extraire le parallélisme et il produit un réseau de processus en tant que représentation intermédiaire du circuit correspondant. Le bloc « Back-End » 3 transforme la représentation intermédiaire du circuit produite par le bloc « Front-End » 2 en circuit physique. Ci-après des notions et traitements utilisés dans les dispositifs de synthèse automatique de circuits haut niveau, et également dans le bloc « Front-End » 2 selon l'invention sont tout d'abord rappelés. Notions et traitements Modèle polyédrique Le modèle polyédrique est un outil d'analyses et d'optimisations des programmes d'ordinateur à contrôle statique. Les programmes à contrôle statique ne manipulent que des tableaux statiques et des variables de type simple (pas de pointeurs) et dont le contrôle est limité aux boucles « for » et « if ». Une caractéristique essentielle est que les fonctions d'indice des tableaux, les bornes des boucles et les tests des « if » sont des fonctions affines des compteurs des boucles « for » englobantes. Le vecteur d'itération 1 d'une affectation S est formé des compteurs des boucles qui l'englobent. L'instance d'exécution (S, ) est appelée opération. Les opérations sont les unités de base des analyses polyédriques. Le domaine d'itération d'une affectation est l'ensemble de tous ses vecteurs d'itération au cours de l'exécution. Sous ces restrictions (boucles « for », « if », contraintes affines), le domaine d'itération d'une affectation est exactement un polyèdre convexe, dont la forme ne dépend pas des entrées de l'affectation. On peut alors le calculer statiquement, et appliquer diverses opérations polyédriques (opérations géométriques, optimisation linéaire, comptage, etc.) pour construire des analyses statiques et transformations de programmes. Ci-après, on distinguera dans chaque opération W = f (Ri, ..., Rn) les lectures (R1, ..., Rn) et écritures (W). Pour un programme à contrôle statique P, on note 0(P) l'ensemble des opérations élémentaires ainsi obtenu. On note p, l'ordre d'exécution séquentiel sur 0(P). On convient que les lectures R, d'une opération sont exécutées avant l'écriture : R, M(P). Par commodité, dans toute la suite, on appellera opération une opération élémentaire. Dépendances, ordonnancement Il existe une dépendance X -> Y entre deux opérations X, YE 4 (P) lorsque X s'exécute avant Y(X 'q Y)) et lorsque X et Y accèdent au même emplacement mémoire (1..1(X) = 1..1(Y)). Selon la nature de X et de Y (lecture ou écriture), on parle de dépendance de flot (W puis R), anti (R puis W) ou sortie (W puis W). Les dépendances anti et sortie n'expriment que des conflits d'accès à la mémoire et peuvent être supprimés en modifiant l'utilisation de la mémoire En réalité, seules les dépendances de flot comptent, qui expriment le calcul réalisé par le programme. Plus précisément, on s'intéresse aux dépendances de flot W R ou W est la dernière écriture de 1..1(R) qui précède R, autrement dit le W qui définit la valeur lue par R. Ce W, qui est unique, est appelé source de R. On le note s(R). On a : s(R) = max{W E S2(P),p(W) = p(R) A W seqR}, l'opérateur A signifiant - La plupart des transformations de programmes (optimisations etc.) peuvent s'écrire avec une fonction d'ordonnancement. Le modèle polyédrique fournit des techniques pour calculer des ordonnancements affines 0(S, =Ai+be (NP , Y entre deux opérations X, Y 0(X) « 0(Y), i.e. l'ordre d'exécution de X est antérieur à celui de Y. L'ordre d'exécution induit par 0 est noté - A titre d'exemple, considérons le programme Prog suivant exprimé en langage de haut niveau : 11 : a[0] = 0; 12 : a[N-1] = 0; for(t=0; t K-1; t++) f for(i=1; i N-2; i++) S : b[i] = a[i-1] + a[i] + a[i+1]; for(i=1; i N-2; i++) T : a[i] = b[i]; 1 R : result = a[1]; Ce programme Prog est un programme Jacobi 1D à contrôle statique qui effectue un calcul de relaxation binomiale itératif. Les bords du tableau a sont initialisés (affectations 11 et 12), ensuite, on calcule itérativement une moyenne sur chaque fenêtre de trois cases (affectations S et T). Enfin, on récupère le résultat (affectation R). Les domaines d'itération des affectations sont donnés en représentés en figure 2. Les domaines des affectations 11, 12 et R sont réduits à un point. Les domaines des affectations S et T sont des rectangles, qu'on superpose ici pour faciliter la présentation. Les points noirs représentent les itérations de S, et les croix représentent les itérations de T. Ce programme comporte tous les types de dépendances, dont quelques instances sont représentées par des flèches sur le dessin. - Dépendances de flot : (11, ) -> (S, t,), (12,) -> (S, t, N - 2), (S, t, i) -> (T, t, i), (T, t, i) -> (S, t + 1, i - 1), (T, t, i) -> (S, t + 1, i), (T, t, i) -> (S, t + 1, i + 1), (T, K - 1,1) - > (R,). - Dépendances anti (en pointillés) : (S, t, i) -> (T, t, i-1), (S, t, i) -> (T, t, i), (S, t, i) -> (T,t,i+1), (T, t, i) -> (S,t+1,i) - Dépendances de sortie : (S, t, i) -> (S, t+1, i) (T, T-1,1) -> (R, ), toutes ces dépendances sont incluses dans les dépendances de flot, elles ne sont donc pas représentées. Un ordonnancement valide est 0(11, ) = 0(12, ) = (0), 0(S, t, i) = (1, 2t+i, t, 0), 0(T, t, i) = (1, 2t + i +1, t,1), 0 (R, ) = (2). L'ordre d'exécution correspondant est le suivant. On exécute d'abord 11 et 12 en même temps. Ensuite, on exécute les instances de S et T de façon entrelacée, comme indiqué sur le dessin. Enfin, on exécute R. Cet ordonnancement est valide, en ce sens qu'il satisfait bien toutes les dépendances. Par exemple, la première dépendance anti est respectée puisque 0(S,t,i)=(1,2t+i,t,0)«0(T,t,i-1)=(1,2t+i-1+1, t, 1) = (1 ,2t + i, t, 1). Allocation mémoire, assignation unique Une allocation mémoire est une application o qui associe à chaque emplacement mémoire m E M(P) adressé par P, un emplacement alternatif a(m) dans un nouvel ensemble d'emplacement mémoire M', o : M(P) -> M'. Etant fixé un ordonnancement 0, deux emplacements mémoire m et m' E M(P) 0-interfèrent s'il existe W1, W2, R1, R2 E M(P) avec p(W1) = p(R1) = m, p(W2) = p(R2) = m', e(W1) « 0(R2), et 0 (W2) « 0(R1). On note alors m> a m' o-(m) # o-(m' ) Un programme transformé est entièrement décrit par la donnée: (i) des opérations 0(P) du programme P, d'un ordonnancement valide 0, et d'une allocation 0-correcte o : (0(P), 0, o). Le programme initial peut s'écrire (0(P), 0'q, Id), et on a l'équivalence de calcul : (0(P), 0'q, Id) = (0(P), 0, o), Id étant l'allocation initiale des données. Un programme est en assignation unique si chaque opération d'écriture écrit un emplacement mémoire différent, autrement dit si pour W1, W2 c 0(P), a(W1) = 0(W2) => W1 = W2. Pour passer un programme en assignation unique, on se sert de la fonction source s pour lire les bons emplacements On forme M' = {W, W E 0(P)} et on définit o par a(W) = W pour chaque écriture W de 0(P) et a(R) = s(R) pour chaque lecture. Le programme transformé (0(P), 0, a) est alors en assignation unique. A titre d'exemple, pour passer le programme Prog en assignation unique, on commence par calculer la fonction source s(.). - s((11,) : a[O]) = a[O], la source de la lecture a[0] de l'opération (11,) n'existe pas dans le programme, on garde donc la valeur en entrée de a[O]. - s((12,) : a[N - 1]) = a[N --I ], pour les mêmes raisons. - - Pour les lectures de (S, t, i), on obtient les sources suivantes : 2 1 =1 : (I 1) s((S,t, i) : a[i -1]) = i At=0 : a[i -1] i2At1:T[t-1][i-1] t = 0 : a[i] s((S,t, i) : a[i]) = t 1 : -1][i] s((S,t, i) : a[i +1]) = i= N-2:('2) i 7 - Une allocation des canaux o : 0(P) U c E CCi - Un ensemble de synchronisations qui garantissent un ordre de précédence synchro c 52(P)x52(P) total sur chaque processus fl (X) = fl (Y) X - Chaque affectation du programme P donne lieu à un processus. Un réseau est partiellement équivalent à P si toutes ses exécutions qui terminent produisent le même calcul que P, c'est à dire si tous les ordonnancements observables dans R totalement définis sur 0(R) sont des ordonnancements corrects de P. De plus, si le réseau est garanti sans interblocage, on dit qu'il est équivalent à P et que la compilation est correcte. Réseaux de processus DPN et compilation selon l'invention Un procédé et un dispositif de synthèse automatique de circuit selon l'invention utilise dans le traitement mis en oeuvre par le bloc 2 « Front-End » un réseau de processus particuliers, dit DPN (en anglais, « Data-aware process network »). Le bloc « Front-End » 2 effectue en effet une compilation d'un programme à contrôle statique qui lui est fourni en entrée, en réseaux de processus DPN. Un DPN est un réseau de processus régulier qui vérifie les conditions suivantes : - Chaque canal admet un unique processus source (i.e. un unique processus autorisé à écrire dans le canal) et un unique processus destination (i.e. un unique processus autorisé à lire dans le canal ; dans un mode de réalisation, il existe même un seul port d'entrée d'un unique processus destination). - Les canaux sont des mémoires bloquantes en écriture et en lecture ; i.e. ce sont des mémoires à accès aléatoire en lecture et écriture telles qu'un processus ne peut y écrire si le contenu alors présent n'a pas été lu et inversement on ne peut les lire tant que le contenu à lire n'a pas été écrit. Un schéma de compilation (n, o, prec) d'un programme à contrôle statique P vers un DPN doit vérifier les conditions suivantes: - Pour chaque lecture dans un canal, la source est bien écrite dans le même canal: si (P1, C, P2) est une connexion de P1 vers P2 en passant par le canal C, alors fl (R) = P2 A a(R) E C n (s(R)) = Pl A o(s(R)) A C. - On choisit un ordonnancement correct 0 dont l'ordre induit sur Q(P) est total, et on choisit une allocation o qui est 0 -correcte. - L'ordre de précédence est total sur chaque processus, et non défini partout ailleurs, prec =- On considère un programme P à traduire en DPN par le bloc « Front-End » 2 et un ordonnancement 0 valide. Afin de construire facilement les processus LD et ST, le bloc « Front-End » 2 ajoute au programme P, pour chaque tableau de données a lu en entrée dans la mémoire principale distante, la famille d'opérations suivante : T E S2 : a[i] = 0 ;//(LDa, où n est l'ensemble des indices du tableau a. Pour chaque tableau écrit b, le bloc « Front-End » 2 ajoute au programme la famille d'opérations suivante, où d est une variable scalaire quelconque: i E S2 : d= b[ i ; //(STb, i) où n est l'ensemble des indices du tableau b. On convient que les opérations LDa sont exécutées tout au début de P, et que les opérations de STb sont exécutées tout à la fin de P. Ainsi (LDa, i, )- ) pour chaque opération originale (S, T2 ) de P. Cette propriété peut être spécifiée avec un ordonnancement multidimensionnel. Le bloc « Front-End » 2 crée un réseau DPN en plaçant chaque affectation sur un processus différent, P = {S1, ..., Sn} (affectations de P), et fl(W) = fl (R1) = = fl (Rn) = S, où W, R1, ..., Rn sont les opérations réalisées par l'affectation S : W = f(R1, ..., Rn) . En particulier, il est créé un processus LDa par tableau a lu, et un processus STb par tableau b écrit. La connexion de ces processus aux processus de calcul s'obtient naturellement avec la fonction source s. 8 Chaque processus est muni par le bloc « Front-End » 2 des éléments suivants: - Un port d'entrée par référence lue par l'affectation implémentée par le processus. Le port d'entrée est un multiplexeur, chargé de récupérer la valeur de la référence dans le bon canal. - Un port de sortie, qui émet la valeur calculée par le processus. Le port de sortie est un démultiplexeur qui écrit la valeur calculée par le processus dans le bon canal. Pour construire un DPN, il suffit au bloc « Front-End » 2 de calculer ces éléments, et d'allouer chaque canal (fonction a). Multiplexage, démultiplexage Lors de la compilation d'un programme P, le bloc « Front-End » 2 calcule la fonction source pour chaque lecture. Pour une opération (T, i) : i E D (domaine d'itération de T) : W = f (R1, Rn), la source d'une lecture R parmi {R1, ..., Rn} se présente sous la forme : i E D1 : (Si, ui (i )) s((T, : R) = i E , u,e (T)) où les Dk sont des polyèdres convexes fermés, les uk sont des fonctions affines et les Tk sont des affectations du programme. Pour chaque couple d'affectations (S, T) telles que S écrit un tableau lu par la référence R de T, le bloc « Front-End » 2 crée un canal al CS,T,R. Si D est le domaine CS,T,R d'itération de S, est un tableau de dimension égale à la dimension de D, dim D. Ces canaux sont ensuite connectés par le bloc « Front-End » 2 aux processus via les ports d'entrée et de sortie en procédant de la façon suivante. Pour chaque affectation T E {Ti, ..., Ti}, pour chaque lecture R de T, pour chaque clause T E Dk : (Sk, uk(i)) de la source s((T,i) : R), le bloc « Front-End » 2 effectue les opérations suivantes : - ajout au port d'entrée correspondant à R d'une connexion au canal Csk,T,R, et on ajoute la clause de multiplexage T E Dk : Csktp[Uk( )] qui commande la lecture de la case uk(i) du canal Csk,T,R quand l'itération courante vérifie T E Dk ; - ajout au port de sortie de Sk une connexion vers le canal Csk,T,R, et ajout de la 11 clause de multiplexage i E uk(Dk) : Cskj,R [i] qui commande l'écriture de la valeur calculée dans la case i (vecteur d'itération courant) du canal Csk,T,R quand l'itération courante vérifie i E uk(Dk). Par construction, chaque canal Csk,T,R possède bien une unique source (Sk) et un seul port d'une unique destination (T). Un multiplexeur pour chaque port d'entrée d'une affectation T est adapté pour déterminer la clause de multiplexage correspondant au vecteur d'itération courant de l'affectation et fournissant le canal pertinent et sa case pour ce vecteur d'itération et pour lire cette case de ce canal. Un démultiplexeur pour chaque port de sortie d'une affectation S est adapté pour déterminer la clause de multiplexage correspondant au vecteur d'itération courant de l'affectation et fournissant le canal pertinent et sa case pour ce vecteur d'itération, et pour écrire le résultat dans cette case de ce canal. Ensuite, les processus LD et ST sont connectés au DPN. En effet, lorsque Tk est un processus LDa, il s'agit d'une valeur d'entrée du processus, et la compilation par le bloc Front-End 2 crée naturellement le multiplexage pour récupérer la bonne valeur dans le canal écrit par LDa. De plus, le multiplexeur d'un processus de sortie STb récupère dans ses canaux les valeurs finales pour chaque case de b. A titre d'illustration, la figure 4 illustre le résultat de la compilation par le bloc « Front-End » 2 du programme Prog. Les processus sont représentés par des boîtes aux contours en trait gras. Les processus de calcul sont représentés par des boîtes aux contours en trait gras sans motif intérieur, les processus LDa et ST (LOAD et STORE) sont représentés par des boîtes aux contours en trait gras avec un motif intérieur strié. Les canaux sont représentés par des boîtes aux contours en trait fin avec des points en motif intérieur, les multiplexeurs et démultiplexeurs sont représentés en contours en trait fin sans motif intérieur. Chaque processus de calcul possède un ou plusieurs ports d'entrée. Chaque port d'entrée est disposé entre un multiplexeur qui lui est propre, nommé sur la figure 4 selon les processus « MUX », « MUX1 », « MUX2 », « MUX3 », et le processus. Le multiplexeur détermine quel est le canal pertinent et la case du canal pour l'itération courante, et lit la donnée dans cette case du canal pertinent. De même, chaque processus possède un port de sortie, qui transmet le résultat du calcul courant vers un démultiplexeur, nommé sur la figure 4 « DEMUX ». Le démultiplexeur détermine quel est le canal pertinent ou les canaux pertinents, et la case du canal pour l'itération courante de l'affectation et écrit le résultat dans un ou plusieurs canaux. Par exemple, le processus, dans le programme Prog, calculant l'affectation S correspondant à b[i] = a[i-1] + a[i] + a[i+1], possède trois ports d'entrée, avec les valeurs respectives de a[i - 1], a[i], et a[i + 1]. Pour la lecture de a[i-1], le multiplexeur MUX 1 détermine à l'aide de la fonction source s((S, t, i) : a[i-1]) que quand i k 2 A t = 0, la source est (LDa, i - 1), d'où la sélection d'un canal en provenance de LOAD(a). Le démultiplexage correspondant du processus LOAD(a) est donné par [(t, i) i -1] (i 2 A t = 0) = i 1. Le DPN a été obtenu et opère de façon analogue pour chaque source de chaque lecture de chaque affectation. Dans la suite, le processus qui exécute l'affectation S sera dénommé « processus S » et le processus qui exécute l'affectation T sera dénommé « processus T ». Allocation des canaux Le bloc « Front-End » 2 est en outre adapté pour créer, lors de la compilation du réseau DPN pour un programme P, une fonction d'allocation o pour chaque canal. o est utilisée comme fonction d'adressage du canal. Toute requête vers Canal [I> ] accède en réalité à Canal Mi )] . L'allocation se présente sous la forme d'une fonction affine modulaire A i> mod Les coordonnées de E) correspondent aux tailles des différentes dimensions du canal CTk,S,Rk, qui peut maintenant être effectivement construit par le bloc Front-end 2. A titre d'illustration relative à la construction d'un réseau DPN pour le programme Prog, pour allouer le canal C entre S et T, avec 0(S, t, i) = (t + i, t, 0), 0(T, t, i) = (t + i, t, 1). le Bloc front-end 2 calcule la fonction d'allocation a(t, i) = (t mod 1, i mod 1), par exemple comme décrit dans « Lattice-Based Array Contraction: From Theory to Practice », Christophe Alias, Fabrice Baray, Alain Darte, Research Report RR2007-44, Laboratoire de l'Informatique du Parallélisme, ENS- Lyon, November 2007. En d'autres termes, Cs,T,b[] est un canal à 2 dimensions de taille 1 x 1, qui est dorénavant accédé avec a. Il peut être implémenté avec un simple registre. Synchronisation des canaux Dans un réseau DPN selon l'invention, les canaux sont bloquants en lecture et en écriture : une case d'un canal ne peut pas être lue avant d'avoir été écrite (par sa source), et une case ne pas être écrite avant que sa valeur couramment stockée ne soit lue pour la dernière fois. Les écritures et les lectures dans un canal sont synchronisées, selon l'invention, pour forcer cette propriété. Le bloc « Front-End » 2 est ainsi adapté pour construire une unité de synchronisation S, pour chaque canal c qui relie le port de sortie d'un processus producteur P au port d'entrée Rk d'un processus consommateur C. Chaque itération W (écriture) du producteur et chaque itération R (lecture) du consommateur dans le canal c donnent lieu, préalablement à leur exécution, à la fourniture d'une requête d'exécution soumises à l'unité de synchronisation S, qui décide d'autoriser ou non leur exécution. Pour forcer les dépendances de flot, l'unité de synchronisation décide dans un mode de réalisation de l'invention, d'arrêter l'exécution du consommateur si la donnée qu'il veut lire n'est pas encore produite. Et pour forcer les dépendances anti-, l'unité de synchronisation décide, dans un mode de réalisation de l'invention, d'arrêter l'exécution du producteur s'il veut écraser une donnée qui n'a pas encore été lue pour la dernière fois. Notons qu'il n'est pas nécessaire de forcer les dépendances de sortie, toutes les écritures étant exécutées par le producteur dans l'ordre séquentiel de l'ordonnancement. Ces deux évènements se traduisent de la façon suivante par exemple par l'utilisation par l'unité de synchronisation de la fonction suivante S, par l'unité de synchronisation, où X - La deuxième condition signifie que l'exécution du producteur P est interrompue quand il est sur le point d'écraser une donnée qui n'a pas fini d'être lue. Autrement dit, lorsque le producteur P tente d'écrire une case cy,(VV) qui doit encore être lue plus tard par R'. La fonction source s(R) est déjà calculée par le multiplexeur du processus C qui lit le canal c. La condition Freeze (P) peut être simplifiée de manière conservative en R- Si au contraire 0(S, tp,ip) « 0(S,ts,is), et tant que cette dernière expression reste vraie ((te, ip) étant le dernier identifiant d'itération du processus producteur S alors transmis par S à l'unité de synchronisation), l'unité de synchronisation n'autorise pas la nouvelle itération (tc, ie) du consommateur T. Une commande correspondante SmdT est alors transmise en réponse par l'unité de synchronisation au processus consommateur T (comme vu précédemment, cette commande est alors un signal Freeze(C), continu ou ponctuel suivant les modes de réalisation évoqués). Considérons à présent que l'unité de synchronisation vient de recevoir la requête d'autorisation d'exécution d'une nouvelle itération du processus producteur S et l'identifiant de sa nouvelle itération, (te, ip). Si 0(S,tp,ip)« 0(T,tc,ic) ,((tc, ic) étant le dernier identifiant d'itération du processus consommateur T alors transmis par T à l'unité de synchronisation), l'unité de synchronisation autorise la nouvelle itération (tp, ip) du producteur S. Une commande correspondante Smds est alors transmise en réponse par l'unité de synchronisation au processus producteur S (comme vu précédemment, cette commande est alors un signal d'autorisation ou l'absence d'un signal de type Freeze(P) suivant les modes de réalisation évoqués). Si au contraire 0(T,tc,ic)«0(S,tp,ip), et tant que cette dernière expression reste vraie, l'unité de synchronisation n'autorise pas la nouvelle itération (tp, ip) du processus producteur S. Une commande correspondante Smds est alors transmise en réponse par l'unité de synchronisation au processus consommateur T (comme vu précédemment, cette commande est alors un signal Freeze(P), continu ou ponctuel suivant les modes de réalisation évoqués). En prenant comme fonction d'ordonnancement celle indiquée dans les exemples précédents relatif à la construction d'un réseau DPN pour le programme Prog, S étant le processus producteur et T étant le processus consommateur, les expressions relatives à Freeze(C) et Freeze(P) indiquée plus haut deviennent : Freeze(C) si, et tant que, (tp + ip, tp, 0) « (ts + is, ts, 0) i.e. si et tant que : (tp + ip Par nature, l'ordre lexicographique («) produit des expressions très redondantes, ce qui permet de produire un circuit de test très simple. On notera que dans d'autres modes de réalisation, des règles de synchronisation autres sont mises en oeuvre par l'unité de synchronisation pour synchroniser entre eux les processus producteur et consommateur associés à un même canal. Une fois la transformation en représentation intermédiaire DPN ainsi réalisée par le bloc 2 « Front-End » à partir de la représentation algorithmique du programme Prog, cette représentation intermédiaire est fournie au bloc 3 « Back-End ». De manière connue, le bloc 3 « Back-End » construit matériellement le bloc de circuits électroniques à partir de cette représentation intermédiaire DPN On pourra utiliser, par exemple, un outil de synthèse existant comme C2H, comme décrit dans « Christophe Alias, Alain Darte, and Alexandru Plesco. Optimizing DDR-SDRAM Communications at CLevel for Automatically-Generated Hardware Accelerators. An Experience with the Altera C2H HLS Tool. In 21st IEEE International Conference on Application-specific Systems, Architectures and Processors (ASAP'10), Rennes, France, pages 329-332, July 2010. IEEE Computer Society ». Chaque processus, canal, multiplexeur est décrit comme une fonction C2H. Chaque fonction est traduite par C2H dans un module matériel. Les connexions entre les modules sont spécifiées à C2H en utilisant des pragmas de connexion. Chaque connexion sera traduit par C2H dans un bus matériel standard. Un dispositif de synthèse automatique de circuits selon l'invention permet de générer automatiquement des circuits électroniques réalisant, rapidement et en requérant un volume physique occupé limité, les calculs d'un programme P écrit dans un langage de haut niveau. Il existe de nombreux modèles d'exécution parallèle sous forme de réseaux de processus (KPN, SDF, etc.). L'invention propose la compilation en réseaux de processus DPN (Data-aware Process Network) selon un modèle d'exécution parallèle adapté aux contraintes matérielles de la synthèse de circuits dans lequel les transferts de données avec une mémoire distante sont explicites. Une telle compilation en DPN est consistante en cela qu'elle transforme un programme séquentiel en un réseau de processus DPN équivalent, garanti sans interblocage. Les entrées/sorties (i.e. les transferts de données avec une mémoire distante) sont explicites et les canaux de communication sont des mémoires tampons beaucoup moins contraignantes que des FIFO, pilotées des unités de synchronisation de performance équivalente.25 REVENDICATIONS1.- Procédé de synthèse automatique de circuits comprenant une étape de compilation d'un programme logiciel en un réseau de processus réguliers interconnectés à l'aide de canaux (c), selon lequel chaque canal est une mémoire physique adressable, chacun desdits processus applique, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement fournit, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution ; ledit procédé de synthèse de circuits étant caractérisé en ce qu'il comprend les étapes suivantes, lors de l'étape de compilation, pour chacun desdits canaux (c) : un unique processus, dit processus producteur (S), est autorisé à écrire des données dans le canal (c) et un unique processus, dit processus consommateur (T), est autorisé à lire des données dans ledit canal ; et une unité de synchronisation (Se) est associée audit canal, et telle qu'elle collecte, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur (tp, ip) de ladite nouvelle itération du processus producteur, et collecte, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur (tc, ic); ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processus producteur, respectivement consommateur, autorisant ou gelant la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur, respectivement producteur. 2.- Procédé de synthèse automatique de circuits selon la revendication 1, selon lequel ladite unité de synchronisation (Se) est telle qu'elle pilote le fonctionnement du processus producteur (S) dudit canal (c) en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération (tp, ip) dudit processus producteur : - l'unité de synchronisation compare la nouvelle position d'exécution (e(tp, ip)) de ladite valeur collectée, à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération du processus consommateur (T) collectée ; et- ladite unité de synchronisation gèle la mise en oeuvre par le processus producteur de cette nouvelle itération si la position d'exécution (e(tp, i p)) de cette nouvelle itération est postérieure à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération collectée du processus consommateur, le gel étant maintenu par l'unité de synchronisation jusqu'à la collecte d'une future valeur d'itération du processus consommateur telle que la position d'exécution (e(tc, ic)) de cette future valeur d'itération soit postérieure à ladite position d'exécution (e(tp, i p)) de la nouvelle itération du processus consommateur. 3.- Procédé de synthèse automatique de circuits selon la revendication 1 ou 2, selon lequel ladite unité de synchronisation (Se) est telle qu'elle pilote le fonctionnement du processus consommateur (T) dudit canal en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération dudit processus consommateur : - l'unité de synchronisation détermine la position d'exécution (e(ts, is)) de celle des valeurs d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal (c) de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération ; et - ladite unité de synchronisation gèle la mise en oeuvre par le processus consommateur de sa nouvelle itération si la position d'exécution (e(ts, is)) déterminée est postérieure ou égale à la position d'exécution (0(1p, i p)) de la dernière valeur d'itération collectée du processus producteur, le gel étant maintenu par l'unité de synchronisation jusqu'à la collecte d'une future valeur d'itération du processus producteur telle que la position d'exécution (e(tp, p)) de cette future valeur d'itération soit supérieure strictement à ladite position d'exécution (e(ts, is)) déterminée. 4.- Procédé de synthèse automatique de circuits selon l'une des revendications 1 à 3, selon lequel le processus consommateur (T) ou producteur (S) de chaque canal après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivre à l'unité de synchronisation (Se) du canal (c), la valeur d'itération de la nouvelle itération du processus, et met en oeuvre cette nouvelle itération du processus en fonction d'une commande de pilotage de l'unité de supervision indiquant un gel ou une autorisation.35 5.- Procédé de synthèse de circuits selon la revendication 4, selon lequel le processus consommateur (T) du canal (c), après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivre en outre à l'unité de synchronisation (Se) du canal, ladite valeur d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération. 6.- Dispositif (1) de synthèse automatique de circuits adapté pour effectuer une compilation d'un programme logiciel en générant un réseau de processus réguliers interconnectés à l'aide de canaux (c), dans lequel chaque canal est une mémoire physique adressable, chacun desdits processus étant adapté pour appliquer, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement étant adaptée pour fournir, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution ; ledit dispositif de synthèse de circuits étant caractérisé en ce qu'il est adapté pour lors de ladite compilation, générer et associer à chacun desdits canaux (c) : un unique processus, dit processus producteur (S), autorisé à écrire des données dans le canal (c) et un unique processus, dit processus consommateur (T), autorisé à lire des données dans ledit canal ; et une unité de synchronisation (Se) associée audit canal et adaptée pour collecter, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur (tp, ip) de ladite nouvelle itération du processus producteur, et collecter, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur (te, ie) ; ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processus producteur, respectivement consommateur, étant adaptée pour autoriser ou geler la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur, respectivement producteur. 7.- Dispositif (1) de synthèse automatique de circuits selon la revendication 6, dans lequel ladite unité de synchronisation (Se) générée est adaptée pour piloter le fonctionnement du processus producteur (S) dudit canal (c) en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération (tp, ip) dudit processus producteur : - comparer la nouvelle position d'exécution (e(tp, ip)) de ladite valeur collectée, à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération du processus consommateur (T) collectée ; et - geler la mise en oeuvre par le processus producteur de cette nouvelle itération si la position d'exécution (e(tp, i p)) de cette nouvelle itération est postérieure à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération collectée du processus consommateur, et maintenir le gel jusqu'à la collecte d'une future valeur d'itération du processus consommateur telle que la position d'exécution (e(tc, ic)) de cette future valeur d'itération soit postérieure à ladite position d'exécution (e(tp, ip)) de la nouvelle itération du processus consommateur. 8.- Dispositif (1) de synthèse automatique de circuits selon la revendication 6 ou 7, ladite unité de synchronisation (Se) générée est adaptée pour piloter le fonctionnement du processus consommateur (T) dudit canal en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération dudit processus consommateur : - déterminer la position d'exécution (O(tS, is)) de celle des valeurs d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal (c) de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération, ; et - geler la mise en oeuvre par le processus consommateur de sa nouvelle itération si la position d'exécution (e(ts, is)) déterminée est postérieure ou égale à la position d'exécution (e(tp, i p)) de la dernière valeur d'itération collectée du processus producteur, et maintenir le gel jusqu'à la collecte d'une future valeur d'itération du processus producteur telle que la position d'exécution (e(tp, ip)) de cette future valeur d'itération soit supérieure strictement à ladite position d'exécution (e(ts, is)) déterminée. 9.- Dispositif de synthèse automatique de circuits selon l'une des revendications 6 à 8, dans lequel le processus généré consommateur (T) ou producteur (S) de chaquecanal, est adapté pour, après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivrer à l'unité de synchronisation (Se) du canal (c), la valeur d'itération de la nouvelle itération du processus, et mettre en oeuvre cette nouvelle itération du processus en fonction d'une commande de pilotage de l'unité de supervision indiquant un gel ou une autorisation. 10.- Dispositif de synthèse de circuits selon la revendication 9, dans lequel le processus consommateur (T) du canal (c), après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, est adapté pour délivrer en outre à l'unité de synchronisation (Se) du canal, ladite valeur d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération. 11.- Circuit synthétisé par exemple suite à la mise en oeuvre d'un procédé de synthèse automatique de circuit selon l'une des revendications 1 à 5, comprenant un réseau de processus réguliers interconnectés à l'aide de canaux (c), dans lequel chaque canal est une mémoire physique adressable, chacun desdits processus étant adapté pour appliquer, lors de chaque itération d'un domaine d'itérations qui lui est associé, au moins une lecture d'une donnée dans un canal et/ou une écriture d'une donnée dans un canal, et une fonction d'ordonnancement étant adaptée pour fournir, pour chaque valeur d'itération de chaque processus, une position d'exécution du processus sélectionnée dans un ensemble temporellement ordonné de positions d'exécution ; ledit circuit étant caractérisé en ce qu'il comprend : un unique processus, dit processus producteur (S), associé à chaque canal et autorisé à écrire des données dans le canal (c) et un unique processus, dit processus consommateur (T), associé à chaque canal et autorisé à lire des données dans ledit canal ; et une unité de synchronisation (Se) associée audit canal et adaptée pour collecter, préalablement au lancement de chaque nouvelle itération par le processus producteur du canal, la valeur (tp, ip) de ladite nouvelle itération du processus producteur, et collecter, préalablement au lancement de chaque nouvelle itération par le processus consommateur du canal, la valeur d'itération du processus consommateur (te, ie) ; ladite unité de synchronisation, suite à la collecte de la valeur d'une nouvelle itération du processusproducteur, respectivement consommateur, étant adaptée pour autoriser ou geler la mise en oeuvre de ladite nouvelle itération dudit processus producteur, respectivement consommateur, en fonction d'une comparaison d'une position d'exécution déterminée en fonction de la valeur de nouvelle itération collectée du processus producteur, respectivement consommateur, et d'une position d'exécution déterminée en fonction de la dernière valeur d'itération collectée du processus consommateur, respectivement producteur. 12.- Circuit synthétisé selon la revendication 11, dans lequel ladite unité de synchronisation (Se) générée est adaptée pour piloter le fonctionnement du processus producteur (S) dudit canal (c) en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération (tp, ip) dudit processus producteur : - comparer la nouvelle position d'exécution (e(tp, ip)) de ladite valeur collectée, à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération du processus consommateur (T) collectée ; et - geler la mise en oeuvre par le processus producteur de cette nouvelle itération si la position d'exécution (e(tp, i p)) de cette nouvelle itération est postérieure à la position d'exécution (e(tc, ic)) de la dernière valeur d'itération collectée du processus consommateur, et maintenir le gel jusqu'à la collecte d'une future valeur d'itération du processus consommateur telle que la position d'exécution (e(tc, ic)) de cette future valeur d'itération soit postérieure à ladite position d'exécution (e(tp, ip)) de la nouvelle itération du processus consommateur. 13.- Circuit synthétisé selon la revendication 11 ou 12, ladite unité de synchronisation (Se) générée est adaptée pour piloter le fonctionnement du processus consommateur (T) dudit canal en mettant en oeuvre les étapes suivantes suite à la collecte de la valeur d'une nouvelle itération dudit processus consommateur : - déterminer la position d'exécution (e(ts, is)) de celle des valeurs d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal (c) de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération, ; et - geler la mise en oeuvre par le processus consommateur de sa nouvelle itération si la position d'exécution (e(ts, is)) déterminée est postérieure ou égale à la position d'exécution (e(tp, i p)) de la dernière valeur d'itérationcollectée du processus producteur, et maintenir le gel jusqu'à la collecte d'une future valeur d'itération du processus producteur telle que la position d'exécution (e(tp, ip)) de cette future valeur d'itération soit supérieure strictement à ladite position d'exécution (O(tS, ls)) déterminée. 14.- Circuit synthétisé selon l'une des revendications 11 à 13, dans lequel le processus généré consommateur (T) ou producteur (S) de chaque canal, est adapté pour, après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, délivrer à l'unité de synchronisation (Se) du canal (c), la valeur d'itération de la nouvelle itération du processus, et mettre en oeuvre cette nouvelle itération du processus en fonction d'une commande de pilotage de l'unité de supervision indiquant un gel ou une autorisation. 15.- Circuit synthétisé selon la revendication 14, dans lequel le processus consommateur (T) du canal (c), après la fin d'une précédente itération dudit processus et préalablement au lancement de la nouvelle itération succédant à la précédente itération, est adapté pour délivrer en outre à l'unité de synchronisation (Sc) du canal, ladite valeur d'itération du processus producteur (S) qui donne lieu à l'écriture dans ledit canal de la donnée qui doit être lue par le processus consommateur lors de cette nouvelle itération.