Brevet FR3129010A1 — publié le 20230512

Procédé (1) mis en œuvre par ordinateur de conception automatisée du pipeline d’un circuit logique programmable, de type FPGA, comprenant une pluralité d’opérateurs logiques et une pluralité de bascules formant registres, le procédé (1) comprenant des étapes de : - Acquisition (10) d’une représentation numérique d’un circuit de pipeline cible, - Etablissement (11) d’un réseau de Petri représentatif dudit pipeline cible ; - Une étape d’exploration (12) du réseau de Petri, conformée pour déterminer une configuration optimisée, par exploration de différentes exécutions du réseau de Petri; et - Une étape de sélection (13) d’une exécution de réseau de Petri pour lequel les instants de tirage des transition retardables permettent la minimisation d’une fonction coût prédéterminée, chaque événement de réinitialisation déclenché définissant la position des registres sur le circuit cible en fonction de la position des jetons à l’instant de déclenchement. Figure 1 Procédé mis en œuvre par ordinateur de conception automatisée du pipeline d’un circuit logique programmable de type FPGA L’invention concerne le domaine de la conception automatisée d’un pipeline pour un circuit logique programmable FPGA, de l’anglais field-programmable gate array , traduit en français sous le nom de réseau de portes programmables in situ . Les circuits FPGA sont des circuits logiques comprenant des cellules logiques élémentaires et des bascules logiques, appelées flip-flop , librement connectables les unes aux autres. Chaque FPGA peut être configuré une pluralité de fois pour réaliser des opérations logiques complexes. Il existe d’un point de vue général, le besoin de trouver des solutions pour optimiser les performances des FPGA tout en réduisant le nombre de cellules et de bascules logiques nécessaires. A cet effet, il est connu d’organiser les FPGA selon des méthodes de chaines de traitement, mieux connus sous le nom anglais de Pipelining de FPGA. Un pipeline est un découpage logique permettant de traiter des instructions logiques en parallèle les unes des autres, tout en assurant la synchronisation des opérations lorsque c’est nécessaire. Le pipeline est un élément essentiel dans la conception d’un circuit logique synchrone et permet d’améliorer significativement la fréquence de fonctionnement et donc le débit, au prix d’une latence plus élevée. La génération automatique d’un pipeline, et plus particulièrement le placement optimisé des bascules, formant registres 1 bit, garantit une fréquence cible, mais aussi la minimisation des ressources consommées par le pipeline. Ainsi, la définition d’un pipeline doit répondre à plusieurs critères : – garantir une fréquence minimale de calcul ; – minimiser le nombre de bascules, nécessaires, qui sont des registres de 1bit. – Vérifier des contraintes additionnelles sur le pipeline, qui peuvent correspondre à des besoins fonctionnels. Initialement le sujet de la génération automatique de pipeline a été formalisé par Leiserson et Saxe dans Charles E. Leiserson and James B. Saxe. Retiming synchronous circuitry. Algorithmica, 6(1-6):5–580 35, June 1991 , en utilisant un modèle de graphe pondéré. Leur approche est basée sur le concept de retiming , c’est-à-dire le déplacement de registres à l’intérieur du circuit, mais sans altérer la fonctionnalité. En utilisant le retiming , on peut construire un pipeline assurant un débit minimal, tout en minimisant les ressources consommées par les registres. Toutefois l’approche de cette première publication est peu efficace sur les grands circuits de sorte qu’il existait un besoin pour trouver une solution améliorée. Afin de résoudre ce problème on connait la publication Rémi Parrot, Mikaël Briday, Olivier Roux. Timed Petri Nets with Reset for Pipelined Synchronous Circuit Design . 42nd International Conference on Application and Theory of Petri Nets and Concurrency, Jun 2021, Paris, France. pp.55-75, 10.1007/978-3-030-76983-3_4. hal-03266806. Cette solution ne permet cependant pas de résoudre certaines optimisations relativement importantes telles que le multiplexage temporel, aussi appelé pliage, qui permet de réduire la quantité d’unité logiques mises en œuvre dans le FPGA tout en garantissant une fréquence de fonctionnement minimale. Dit de manière simplifiée, le pliage consiste à mutualiser des portions de circuit en différents endroits du pipeline, afin de réduire la quantité d’unité logiques nécessaires pour la réalisation du pipeline. Aussi, il existe le besoin d’une solution améliorée pour générer automatiquement un pipeline de FPGA, tout en répondant aux besoins énoncés précédemment. On propose un procédé mis en œuvre par ordinateur de conception automatisée du pipeline d’un circuit logique programmable, de type FPGA, comprenant une pluralité d’opérateurs logiques et une pluralité de bascules formant registres, le procédé comprenant des étapes de : - Acquisition d’une représentation numérique d’un circuit de pipeline cible, - Etablissement d’un réseau de Petri représentatif dudit pipeline cible, dans lequel le réseau de Petri est défini de sorte que chaque transition corresponde à un opérateur dudit circuit logique programmable, chaque place corresponde à un signal et est associée à un poids prédéterminé, et chaque jeton corresponde à une donnée traitée par le circuit logique programmable ; chaque transition étant en outre associée à une valeur de temporisation ; ledit réseau de Petri comprenant en outre un compteur incrémental, lesdites transitions étant associées à des valeurs de temporisation retardableou nonretardable ; une transition étant tirée lorsque la valeur du compteur incrément est égale à la valeur de temporisation associée à ladite transition, lorsque ladite valeur de temporisation est non retardable ; et une transition étant tirée lorsque la valeur du compteur incrément est au moins égale à la valeur de temporisation associée à ladite transition, lorsque ladite valeur de temporisation est retardable ; ledit réseau de Petri étant en outre associé à un événement de réinitialisation, aussi appelé reset , remettant à zéro ledit compteur incrémental lorsqu’il est déclenché ; ledit événement de réinitialisation pouvant être déclenché dans un intervalle de temps prédéterminé, Une étape d’exploration du réseau de Petri, conformée pour déterminer une configuration optimisée, par exploration de différentes exécutions du réseau de Petri, correspondant chacune à une combinaison de différents instants de déclenchements possibles de l’événement de réinitialisation et des différents instants de tirage possibles pour chaque transition retardable; et Une étape de sélection d’une exécution de réseau de Petri pour lequel les instants de tirage des transitions retardables permettent la minimisation d’une fonction coût prédéterminée, chaque événement de réinitialisation déclenché définissant la position des registres sur le circuit cible en fonction de la position des jetons à l’instant de déclenchement. Avant la mise en œuvre de l’étape d’exploration, on définit des portions à plier dudit pipeline cible ; et l’étape d’exploration est guidée par des conditions logiques : d’une part l’exclusion mutuelle de données dans des places à plier, et un même positionnement des registres pour les portions à plier. Avantageusement, la condition logique vérifiant le positionnement des registres pour les portions à plier est fonction du nombre de jetons cumulés dans chaque place de portion à plier lors de chaque déclenchement d’événement de réinitialisation. Avantageusement, l’étape d’exploration est guidée par les conditions logiques exprimées selon des propriétés de logique temporelle arborescente, fréquemment appelées propriétés CTL . Avantageusement, l’étape d’exploration est réalisée par parcours de branches et d’embranchements d’exploration successifs d’états du réseau de Petri, chaque branche d’un embranchement étant supprimée lorsque ladite branche ne remplit pas lesdites conditions logiques. L’invention concerne aussi un programme d’ordinateur comprenant des instructions de code de programme pour l’exécution des étapes du procédé décrit précédemment lorsque ledit programme est exécuté sur un ordinateur. L’invention concerne aussi un produit programme d’ordinateur comprenant des instructions de code de programme enregistré sur un support utilisable dans un ordinateur adapté à effectuer les étapes du procédé tel que décrit précédemment. D’autres particularités et avantages de l’invention ressortiront à la lecture de la description faite ci-après d’un mode de réalisation particulier de l’invention, donné à titre indicatif mais non limitatif, en référence aux dessins annexés sur lesquels : - La est un organigramme du procédé selon le mode de réalisation principal de l’invention ; - La est un exemple de schéma cible ; - La est une modélisation de l’exemple de schéma cible de la par un réseau de Petri ; - La est un exemple d’une exécution du réseau de Petri par le procédé selon l’invention ; - La est un exemple de schéma cible sur lequel les registres ont été positionnés par le biais de la sélection d’une exécution optimisée du réseau de Petri ; et - La est un exemple de schéma cible, montrant deux portions de circuit candidats au pliage ; et – la est le réseau de Petri associé au schéma de la . Les figures 1 à 7 se rapportant à un même mode de réalisation, elles seront commentées simultanément. Le procédé 1 selon l’invention est mis en œuvre par ordinateur pour concevoir le pipeline d’un circuit logique programmable, en particulier d’un FPGA. Un FPGA est de manière bien connue formé d’une pluralité de cellules logiques et d’une pluralité de bascules, appelées flip-flop , formant registres de 1 bit, pouvant être interconnectées les unes aux autres. On considère dans la présente description le FPGA comme un ensemble interconnecté de cellules ( slices ), chacune composées de circuits combinatoires ( LUT ) et de synchronisations ( flip-flop ). On ne considère pas les accélérateurs. On entend par conception automatique du pipeline, les étapes de positionnement optimisé de bascules, formant registre 1 bit, afin de garantir le fonctionnement optimal du pipeline. Le procédé 1 met tout d’abord en œuvre une étape d’acquisition 10 d’une représentation numérique 20 d’un circuit de pipeline cible. Cette représentation numérique 20 comprend les liens entre cellules logiques nécessaires pour la réalisation des fonctions voulues par le FPGA. Toutefois le positionnement des registres nécessite d’être déterminé pour assurer un fonctionnement optimal du pipeline. Le procédé 1 selon l’invention permet ainsi de concevoir automatiquement le pipeline, autrement dit de déterminer le positionnement optimisé des registres afin de garantir un fonctionnement optimisé, une fréquence de fonctionnement minimale et une optimisation des ressources logiques consommées. A cet effet, le procédé 1 met tout d’abord en œuvre une étape d’établissement 11 d’un réseau de Petri 21 représentatif dudit pipeline cible. Ce réseau de Petri 21 est établi conformément à l’enseignement de la publication Rémi Parrot, Mikaël Briday, Olivier Roux. Timed Petri Nets with Reset for Pipelined Synchronous Circuit Design . 42nd International Conference on Application and Theory of Petri Nets and Concurrency, Jun 2021, Paris, France. pp.55-75, 10.1007/978-3-030-76983-3_4. hal-03266806. Le réseau de Petri 21 est défini de sorte que : - chaque transition 211 correspond à un opérateur op x du circuit logique programmable, - chaque place 210 correspond à un signal s x et est associée à un poids prédéterminé, - chaque jeton 212 correspond à une donnée traitée par le circuit logique programmable. Chaque transition 211, 221 est par ailleurs associée à une temporisation 214. De plus les transitions 211, 221 peuvent être retardables 221 ou non retardables 211. Sur la , les transitions retardables 221 sont représentées sur fond grisé, alors que les non-retardables 211 sont représentées sur fond blanc. En effet comme on l’expose ci-dessous, le réseau de Petri est aussi modélisé de sorte à fonctionner avec un compteur d’itérations, et les transitions sont ainsi tirées en fonction de ladite valeur du compteur. Il est rappelé que dans les réseaux de Petri, une transition ne peut être tirée que si elle est préalablement sensibilisée, ce qui signifie que les places directement en amont de la transition comprennent au moins un jeton. Lorsqu’une transition 221 est retardable, la valeur numérique de temporisation 214 inscrite sous la transition correspond à la valeur de compteur minimale pour déclencher la transition. Les réseaux de Petri temporisés ont été introduit par Ramchandani avec une certaine sémantique de tir ( avec entrelacement ). Toutefois, dans ce mode de réalisation de l’invention les transitions du réseau de Petri sont tirées selon la règle du tir à pas maximal, telle qu’elle ressort de la publication citée précédemment Timed Petri Nets with Reset for Pipelined Synchronous Circuit Design. Un compteur incrémental compte ainsi les itérations successives entre les différents états du réseau de Petri. Dans le cas d’une transition non-retardable 211, la transition est tirée lorsque la valeur du compteur incrément est égale à la valeur de temporisation associée à la transition. Dans le cas d’une transition retardable 221, celle-ci est obligatoirement tirée lorsque la valeur du compteur incrément est au moins égale à la valeur de temporisation associée à ladite transition. Une mise en œuvre particulière de l’invention pourrait consister à considérer que toutes les transitions sont retardables. Toutefois la complexité calculatoire de l’étape d’exploration 12, exposé ci-dessous, serait alors très importante. Par conséquent, dans le présent mode de réalisation de l’invention on met en œuvre une heuristique selon laquelle les transitions retardables sont les transitions pour lesquelles la taille des signaux d’entrée est inférieure à la taille des signaux de sortie. Par exemple, lorsqu’il existe un signal sur 16 bits en amont et deux signaux sur 4 bits en aval (4+4=8 Le réseau de Petri est de plus associé à un événement de réinitialisation, appelé reset , remettant à zéro le compteur incrémental lorsqu’il est déclenché. Le reset peut être déclenché dans un intervalle de temps I = [ , ] prédéterminé. L’intervalle de reset est déterminé par une heuristique fonction de la fréquence cible f de fonctionnement : la borne haute de l’intervalle ne peut excéder 1/f et la borne basse est déterminée par une heuristique à 1/(2f). Ceci permet de limiter la complexité calculatoire lors de l’étape d’exploration 12. Lorsque le reset est déclenché, il fixe la position des registres d’un étage à la fois. Le procédé 1 met alors en œuvre une étape d’exploration 12 visant à déterminer la meilleure combinaison d’instants de déclenchement du reset et d’instants de tirage des transitions retardables, de sorte à obtenir une position optimisée des registres du pipeline cible. La représente une branche d’une exploration selon l’invention, dans chaque encadré les états principaux du réseau de Petri sont indiqués, les flèches représentant soit la durée écoulée avant que l’état suivant soit obtenu après avoir tiré les transitions tirables, soit un événement survenu tel qu’un reset . Dans la , les indications v(x) indiquent la valeur d’horloge de la transition x, appelée valuation (ou évaluation). v(reset) correspond quant à lui à la valeur de compteur depuis l’initialisation ou le dernier reset. L’étape d’exploration 12 calcule une fonction coût pour chaque exécution du réseau de Petri. La fonction coût Ω(ρ) est la somme des coûts de marquage ω(M) cumulé des états après chaque transition reset sur l’exécution, en commençant par le coût du marquage initial. En effet, le coût de marquage ω(M) d’une place p après un reset détermine le nombre de bascules nécessaires en amont de cette place p. On comprend donc que l’objectif est de minimiser la fonction coût Ω(ρ) puisque la valeur obtenue correspond au nombre de bascules nécessaires pour le pipeline complet. Les coûts de marquage ω(M) sont calculés après chaque reset et pour le marquage initial, comme suit : Dans lequel: : l’ensemble des places succédant une transition qui modélise un opérateur : l’ensemble des places succédant la transition qui modélise le point de branchement sur le signal modélisé par p et avec P : l’ensemble des places p du réseau de Petri ; M(p) : le marquage de la place p, autrement dit le nombre de jeton dans la place p dans l’état considéré ; et C(p) : le coût associé à la place p. L’objectif de l’étape d’exploration est de déterminer l’exécution permettant de minimiser la fonction coût Ω(ρ). Ainsi, on met en œuvre une étape de sélection 13 de l’exécution du réseau de Petri minimisant la fonction coût Ω(ρ) parmi toutes les exécutions candidates obtenues au cours de l’étape d’exploration 12. Ainsi, à titre d’exemple, on obtient à l’issue de l’étape de sélection 13 le schéma selon la avec les registres 51 positionnés par les différents reset réalisés au cours de l’exécution du réseau de Petri sélectionnée. Toutefois, sachant que le FPGA présente une fréquence d’horloge généralement très supérieure au taux d’échantillonnage des signaux fournis, il est avantageux de déterminer au cours de l’exploration la configuration permettant le multiplexage temporel, aussi appelé pliage, du schéma voulu. On détermine tout d’abord des portions du schéma candidate au pliage. La détermination des portions du schéma candidates sont dans ce mode de réalisation est effectuée manuellement. Toutefois une mise en œuvre particulière de l’invention pourrait implémenter des étapes de détermination automatique des portions du schéma candidates, ce sujet ne relevant pas de l’objet de la présente invention. Ainsi, à titre d’exemple la représente un schéma de pipeline identifiant deux portions 61, 62 mutualisables. Le séquençage d'accès aux ressources est fait à l'aide d'un pipeline particulier. La détermination de ce pipeline constitue le problème de modulo ordonnancement. Un point important du modulo ordonnancement est la détermination de l'intervalle d’initialisation, ou autrement dit de déterminer le délai entre deux introductions de nouvelles entrées du circuit. Une mise en œuvre particulière de l’invention peut être faite en modélisant l’introduction périodique de données dans un réseau de Petri par un générateur de jeton en entrée. Cependant, dans le présent mode de réalisation de l’invention, on procède à une simplification supposant qu'une nouvelle donnée n’est introduite qu’une fois tout le calcul terminé pour l’exécution précédente. Autrement dit le pipeline peut traiter une donnée d’entrée entièrement avant qu’une autre donnée ne soit introduite en entrée. Cette hypothèse est tout à fait pertinente dans le traitement du signal, où l'intervalle d'initialisation, c’est-à-dire la période d'échantillonnage, est généralement largement supérieur à la période du pipeline, liée à la fréquence du FPGA. L’objectif du procédé est alors notamment de déterminer le pipeline sur le circuit initial contenant toutes les instances, puis de plier les instances par la suite. Le pipeline doit alors répondre à deux contraintes : 1. Une propriété d'exclusion mutuelle, assurant que les ressources ne peuvent pas être accessibles au même moment par plusieurs portions de pliage. 2. La deuxième concerne le placement des registres, et assure que les portions de circuits à plier possèdent des registres aux mêmes endroits. Ceci est notamment représenté , ou les registres sont placés de manière identique dans les deux portions à plier. Sur l’exemple de la , la première contrainte revient à s’assurer qu’il n’y ait jamais de données en même temps dans les signaux jumelés : à la fois en s5 (respectivement s6) et en s8 (respectivement s10). La deuxième contrainte revient à vérifier qu’il y a autant de registres dans les paires de signaux jumelés. Pour réussir à construire ce pipeline particulier, les étapes d’exploration sont guidées par des propriétés de logique du temps arborescent, mieux connues sous le nom anglophone de Computation Tree Logic , généralement abrégée CTL. L’étape d’exploration est alors restreinte aux exécutions vérifiant ces propriétés. On parle « d’exécution » pour chaque exécution du réseau de Petri fonction d’une configuration particulière de reset et d’instant de tirage des transitions retardables. La contrainte d’exclusion mutuelle peut-être exprimée simplement par une contrainte de marquage vérifiée dans tous les états de l’exécution. Pour rappel le marquage M correspond au nombre de jetons dans une place p Le reset est explicité dans le modèle de l’invention de sorte que les propriétés CTL peuvent compter les reset s effectués dans chaque place. En raison de la densité du temps le reset peut être tiré depuis une infinité d’états ayant le même marquage et l’état successeur sera toujours le même. Ainsi, les seuls temps pertinents de tir du reset sont sur les bornes de son intervalle ( et ) et en même temps qu’un tir de transitions (dans la sémantique juste après le tir de transitions). C’est pourquoi le reset peut être considéré comme une transition retardable possédant une borne supérieure temporelle, et cela préserve les exécutions discrètes. On peut définit une propriété reset(S x ) qui correspond au nombre cumulé de jetons dans la place S x après chaque reset. Ceci permet d’implémenter les contraintes CTL pour la vérification des propriétés énoncées précédemment. Une première propriété atomique assure l’exclusion mutuelle des données dans les places jumelées, par exemple dans l’exemple de la : En effet, dans le modèle les jetons représentent à la fois les positions des registres, et les données propagées lorsque le circuit sera pipeliné. La propriété φmutex vérifie donc que les deux signaux s5 (respectivement s6 ; s6a ; s6b) et s8 (respectivement s10) ne contiendront jamais des données en même temps. Une seconde propriété atomique assure la cohérence du placement des registres entre les places jumelées dans le marquage final : Cette propriété vérifie en effet que dans l’état final M(s11) = 1 les places jumelées auront reçu le même nombre de reset. Enfin, la propriété CTL finale assure que φmutex est maintenue jusqu’à ce qu’elle soit vérifiée en même temps que φconsist (lorsque l’état final est atteint) : Ainsi, pour résoudre le problème de pliage, l’approche de l’invention consiste à mettre en œuvre une étape d’exploration recherchant tous les états du réseau qui vérifient la propriété φfold, mais lorsqu’un état invalidant la propriété est atteint la branche d’exploration est élaguée. Il ne s’agit donc pas de vérification à proprement parler, mais d’une synthèse de pipeline guidée par une propriété CTL. Ainsi l’invention propose une modélisation du pipeline d’un circuit synchrone se basant sur les réseaux de Petri temporisés. L’invention résout en particulier le problème de l’optimisation de pipelines en termes de ressources. Ainsi l’invention définit un modèle réseau de Petri temporisé avec reset et transitions retardables, ainsi qu’une analyse formelle garantissant la génération d’un pipeline avec une fréquence cible de fonctionnement, et minimisant la consommation de ressources vis à vis de la taille des registres et de leur possible mutualisation. La présente invention permet plus particulièrement de traiter conjointement cette optimisation avec le problème de synthèse du pipeline respectant une spécification de logique temporelle. En particulier, une solution au problème du multiplexage temporel est fournie en exprimant de manière explicite le reset dans le modèle du réseau de Petri et en vérifiant des conditions logiques sur le multiplexage temporel au cours de l’étape d’exploration. Par ce procédé 1, nous produisons un pipeline avec multiplexage temporel, assurant une fréquence cible et minimisant les registres consommés. Procédé (1) mis en œuvre par ordinateur de conception automatisée du pipeline d’un circuit logique programmable, de type FPGA, comprenant une pluralité d’opérateurs logiques et une pluralité de bascules formant registres, le procédé (1) comprenant des étapes de : Acquisition (10) d’une représentation numérique (20) d’un circuit de pipeline cible, Etablissement (11) d’un réseau de Petri (21) représentatif dudit pipeline cible, dans lequel le réseau de Petri (21) est défini de sorte que chaque transition (op i ) correspond à un opérateur dudit circuit logique programmable, chaque place (p i ) correspond à un signal et est associée à un poids prédéterminé, et chaque jeton correspond à une donnée traitée par le circuit logique programmable ; chaque transition étant en outre associée à une valeur de temporisation ; ledit réseau de Petri comprenant en outre un compteur incrémental, lesdites transitions (211, 221) étant associées à des valeurs de temporisation retardable ou non retardable ; une transition (221) étant tirée lorsque la valeur du compteur incrément est égale à la valeur de temporisation associée à ladite transition, lorsque ladite valeur de temporisation est non retardable ; et une transition (211) étant tirée lorsque la valeur du compteur incrément est au moins égale à la valeur de temporisation associée à ladite transition, lorsque ladite valeur de temporisation est retardable ; ledit réseau de Petri (21) étant en outre associé à un événement de réinitialisation, remettant à zéro ledit compteur incrémental lorsqu’il est déclenché ; ledit événement de réinitialisation pouvant être déclenché dans un intervalle de temps prédéterminé, Une étape d’exploration (12) du réseau de Petri, conformée pour déterminer une configuration optimisée, par exploration de différentes exécutions du réseau de Petri, correspondant chacune à une combinaison de différents instants de déclenchements possibles de l’événement de réinitialisation et des différents instants de tirage possibles pour chaque transition retardable; et Une étape de sélection (13) d’une exécution de réseau de Petri pour lequel les instants de tirage des transitions retardables permettent la minimisation d’une fonction coût prédéterminée, chaque événement de réinitialisation déclenché définissant la position des registres sur le circuit cible en fonction de la position des jetons à l’instant de déclenchement ; caractérisé en ce qu’avant la mise en œuvre de l’étape d’exploration, on définit des portions à plier dudit pipeline cible ; et l’étape d’exploration est guidée par des conditions logiques : d’une part l’exclusion mutuelle de données dans des places à plier, et un même positionnement des registres pour les portions à plier. Procédé selon la revendication 1, caractérisé en ce que la condition logique vérifiant le positionnement des registres pour les portions à plier est fonction du nombre de jetons cumulés dans chaque place de portion à plier lors de chaque déclenchement d’événement de réinitialisation. Procédé selon la revendication 1 ou 2, caractérisé en ce que l’étape d’exploration est guidée par les conditions logiques exprimées selon des propriétés de logique temporelle arborescente. Procédé selon la revendication 3, caractérisé en ce que l’étape d’exploration est réalisée par parcours de branches et d’embranchements d’exploration successifs d’états du réseau de Petri, chaque branche d’un embranchement étant supprimée lorsque ladite branche ne remplit pas lesdites conditions logiques. Programme d’ordinateur comprenant des instructions de code de programme pour l’exécution des étapes du procédé selon l’une quelconque des revendications 1 à 4 lorsque ledit programme est exécuté sur un ordinateur. Produit programme d’ordinateur comprenant des instructions de code de programme enregistré sur un support utilisable dans un ordinateur adapté effectuer les étapes du procédé selon l’une quelconque des revendications 1 à 4.