• Aucun résultat trouvé

2.4 Analyse des chaînes

2.4.2 Analyse temporelle et comportementale

2.4.2.2 Validation de l’acceptance des blocs

La validation de l’acceptance de chaque bloc représente l’analyse la plus importante visant à garantir l’intégrité du flux. Le modèle d’ordonnancement choisi pour CoGen repose sur un déclen- chement du traitement de proche en proche. Ainsi le bloc A produit une donnée qui est reçue par le bloc B. Cette donnée reçue représente le stimulus qui va entraîner le démarrage du traite-

branche A branche B impl0 dupl global_lat=1 latency=1 generic1b latency=2 generic2b latency=4 generic3 latency=1 generic4 terminal initial global_lat=1 latency=1 latency=0 global_lat=−1 global_lat=−1 global_lat=−1 latency=1 impl1a impl2a global_lat=2 global_lat=4 global_lat=−1 global_lat=−1 latency=3

(a) CoGen a réalisé le parcours de la branche A mais n’est pas en mesure de vérifier l’équilibre des branches car la branche B n’as pas été traitée et présente donc une latence globale de −1.

generic1b global_lat=−1 latency=3 branche A branche B global_lat=1 latency=1 dupl global_lat=1 latency=1 latency=2 latency=4 latency=1 generic3 latency=1 generic4 terminal initial impl0 latency=0 global_lat=−1 global_lat=−1 impl1a global_lat=2 impl2a global_lat=4 generic2b global_lat=−1 global_lat=−1

(b) Ne pouvant continuer le parcours en profondeur, CoGen est reparti sur le bloc de duplication le plus proche afin de parcourir les autres branches.

terminal global_lat=−1 branche A branche B latency=0 global_lat=2 latency=1 impl1a latency=3 impl1b global_lat=8 latency=4 impl2b global_lat=4 latency=2 impl2a latency=4 delay latency=1 generic4 global_lat=−1 initial global_lat=1 impl0 latency=1 dupl generic3 global_lat=−1 latency=1 global_lat=8 global_lat=4

(c) La branche B est maintenant traitée, CoGen est désormais en mesure de vérifier le total des latences et d’ajouter un bloc de délai si nécessaire, puis de calculer la latence globale du bloc impl3.

terminal global_lat=10 branche A branche B global_lat=1 latency=0 impl0 latency=1 dupl initial latency=1 impl3 impl4 global_lat=9 global_lat=10 latency=1 latency=1 latency=4 impl2b global_lat=2

impl1a impl2a delay global_lat=4 global_lat=8 latency=2 latency=4 impl1b global_lat=4 latency=3 global_lat=8

(d) Le parcours de la chaîne est entièrement finie

Figure 2.8 – Parcours d’une chaîne présentant des branches parallèles.

ment du bloc B. Contrairement aux techniques mises en œuvre sur processeur, telles que celle du producteur-consommateur qui repose sur des attentes et des synchronisations, dans le cas d’un flux imposé par un périphérique, il n’est pas possible de simplement retarder la propagation d’une don-

née. Si l’implémentation d’un traitement nécessite un temps d’indisponibilité trop long, les données qui pourraient être transférées seraient irrémédiablement perdues. Ainsi il est impératif de pouvoir garantir, à priori, par une connaissance du flux entrant dans chaque bloc et des caractéristiques de l’implémentation, l’aptitude de réception afin de ne pas risquer de pertes ou de corruptions de données. Comme présenté en introduction de 2.4.2, si une implémentation présente une acceptance en inadéquation avec le flux entrant, la solution est considérée comme inadaptée et est mise de côté pour être éventuellement analysée à nouveau, s’il n’y a pas de solution trivialement exploitable, après modification du format du flux.

Cette analyse repose sur un principe de simulation du comportement d’un bloc vis-à-vis du flux issu du bloc précédent, permettant ainsi de tenir compte pour chaque traitement des évolutions ou altérations éventuelles appliquées en amont. Elle est faite par comparaison entre le flux entrant et l’expansion de son acceptance. Dans cette comparaison, les états successifs du bus d’entrée représentés par des caractères, tel que présenté en 2.2, sont interprétés comme des stimuli, un ’1’ signifiant l’arrivée d’une donnée, va déclencher un traitement et donc faire évoluer l’état du bloc. Dans le cas de l’absence de donnée (’0’), l’état du bloc va dépendre exclusivement de son état courant à ce pas de temps : si le bloc est en attente, il reste dans ce même état ; si le bloc est en train de réaliser son traitement alors le nouvel état va dépendre du caractère suivant dans l’expansion de son acceptance. L’algorithme 1 présente ce traitement :

À un pas de temps particulier (correspondant à un caractère dans la chaîne d’entrée), CoGen regarde l’état du bloc (correspondant au caractère à unoffset particulier dans la liste de l’accep- tance). Par cette analyse il est en mesure de savoir s’il y a concordance entre l’état de l’entrée et celui du bloc. Cette analyse peut se rapporter à la simulation du flux pour évaluer l’état du bloc en accord avec lesstimuli représentés par les données propagées par le bloc précédent :

– si la valeur dans l’entrée est un ’1’ et si la valeur de l’acceptance est également un ’1’ (pas de temps 1 sur figures 2.9(a), 2.9(b), 2.9(c)), cela signifie que le bloc est disponible pour recevoir et traiter la donnée qui est en cours de réception. Le pas de temps (flux entrant) est avancé pour faire évoluer temporellement la simulation, ainsi que l’état du bloc (offset dans l’acceptance) car l’arrivée d’une donnée est le déclencheur du traitement ;

– si les valeurs dans les deux listes sont ’0’ (pas de temps 2 sur les figures 2.9(a), 2.9(b), 2.9(c)) cela signifie que le bloc est occupé. Là encore il y a concordance entre l’acceptance et le flux car aucune donnée ne rentre dans le bloc. Les deux index sont avancés, car contrairement à l’état d’attente, l’état actif n’est pas un état stable ;

– la liste d’entrée contient un ’0’ et l’acceptance est égale à ’1’ (pas de temps 3 sur la figure 2.9(b)), cela signifie que le bloc est en attente de la réception d’une donnée, mais comme aucune donnée n’arrive, le bloc reste inactif et seul le pas de temps est incrémenté ;

– si finalement une donnée est reçue mais que le bloc est occupé (figure 2.9(c) au pas de temps 3), alors il y a non concordance entre la forme du flux et l’acceptance du bloc : le bloc

n’est donc pas en mesure de traiter le flux. La chaîne est donc déplacée pour être traitée si nécessaire (cas de l’absence de chaîne admissible).

Si le parcours des listes se termine avec succès, le bloc est considéré comme capable de traiter le flux et le traitement suivant est réalisé.

flux entrant

acceptance

10101010

10101010

(a) Flux identique à l’accep- tance d’un bloc

flux entrant acceptance

100100100100

10101010

(b) Flux entrant plus lent que l’ac- ceptance

flux entrant

acceptance

101010101010

100100100100

(c) Flux entrant incompatible avec l’acceptance

Figure 2.9 – Divers cas de comparaison entre un flux et une acceptance.

2.4.2.3 Construction de la représentation du flux de sortie à partir du flux d’entrée