• Aucun résultat trouvé

CHAPITRE 4 AUTOMATISATION DE L’INSERTION DES STRUCTURES DE

4.4 Détermination des signaux de contrôle de test

4.4.4 Fonctionnement détaillé du programme

4.4.4.4 Analyse de la dépendance des horloges

L’analyse de la dépendance des horloges est une étape nécessaire pour déterminer les chemins de données convergents. C’est-à-dire les chemins dont le point de départ est un domaine d’horloge et le point d’arrivé est un registre qui peut être accédé par un chemin de donnée et un chemin d’horloge. Cette étape permet donc d’établir quels sont les chemins d’horloge existant dans le circuit. Le résultat sera obtenu sous la forme d’un graphe de multiplexeurs qui permettra de connaître les dépendances entre les domaines d’horloges.

Pour le mini-MIPS et dans l’idéal, notre graphe des dépendances d’horloges devrait ressembler à la dépendance théorique des key units vu dans le CHAPITRE 2 (Figure 4.13). En pratique, on verra que du fait des structures complexes dans le chemin d’horloge et le choix de notre algorithme, les dépendances dans notre graphe final seront beaucoup plus nombreuses. L’analyse de la dépendance des horloges regroupe 3 algorithmes qui sont : la contraction de graphe, la définition de la dépendance des horloges à partir du graphe contracté et la recherche de machines à états finis.

Figure 4.13 Dépendance théorique des horloges du mini-MIPS Reproduite avec la permission de Fiorentino (2018)

Contraction de graphe (multiplexeurs de test seulement)

L’objectif de cet algorithme est d’obtenir un graphe de multiplexeurs de test qui représente la dépendance entre les domaines d’horloges. Pour y parvenir et à partir du graphe représentant la netlist, l’algorithme va supprimer tous les sommets qui ne sont pas les multiplexeurs de test détectés grâce au programme détaillé à la section 4.4.2.

Le principe de l’algorithme est illustré avec un exemple sur la Figure 4.14. On peut observer que pour chaque sommet supprimé, on connecte ses voisins d’entrée à ses voisins de sortie. Le résultat est un graphe contracté où tous les sommets sont des multiplexeurs de test.

M1 M2 M3 1 0 2 3 4 M1 M2 M3 1 2 3 4 M1 M2 M3 2 3 4 M1 M2 M3 3 4 M1 M2 M3 4 M1 M2 M3

1

2

3

4

5

6

Figure 4.14 Principe de l'algorithme de contraction de graphe, tous les sommets sont supprimés excepté ceux représentant les multiplexeurs de test

La contraction du graphe est réalisée par la fonction ContractionDeGraphe décrite en (Algorithme 4.3). Les sommets sont parcourus un à un dans l’ordre de la liste qui représente la netlist. L’algorithme commence par réaliser des vérifications préalables à la suppression du sommet entre les lignes 4 et 10. Ces vérifications sont nécessaires, car, dans certains cas, les sommets doivent être supprimés du graphe. Par exemple lorsqu’ils n’ont pas de voisin d’entrée, il n’y a aucun sommet à connecter au voisin de sortie, le sommet est donc inutile et doit être supprimé. C’est le cas pour les entrées principales du circuit dont la détection est réalisée par IsInput, les signaux de contrôle de test par balayage comme scan_en, scan_clock détecté par IsScanSignal ou encore les points de test détectés par IsTestPoint. Dans le cas où les sommets ont un retour sur eux-mêmes, les booléens IsFeedbackOnItslef et

IsFeedbackOnItselfAndZeroInput sont nécessaires pour nous permettre de différencier :

• les sommets qui doivent être directement supprimés, car ils n’ont aucun autre voisin d’entrée excepté eux-mêmes;

• les sommets qui doivent être gardés, car ils ont un voisin d’entrée en plus d’eux-mêmes tels que décrits à la Figure 4.15.

1

1

2

IsFeedbackOnItself = VRAI IsFeedbackOnItselfAndZeroInput = VRAI IsFeedbackOnItself = VRAI IsFeedbackOnItselfAndZeroInput = FAUX

Figure 4.15 Illustration de l'utilisation des booléens IsFeedbackOnItself et IsFeedbackOnItselfAndZeroInput

Si le sommet du graphe correspond au cas présenté à gauche de la Figure 4.15, on peut le supprimer sans connecter ses voisins d’entrée à sa sortie, ce qui reviendrait a ajouté une deuxième boucle de retour sur lui-même. Dans le cas où le sommet correspond au cas de droite de la Figure 4.15, le sommet est géré comme n’importe quel autre élément du graphe.

1. ContractionDeGraphe(config conf, Graphe G) 2.

3. Pour tout les sommets s dans G

4. IsMux = DétecterMultiplexeursDeTest(s); 5. IsFeedbackOnItself = DétecterConnexionSurLuiMême(s); 6. IsFeedbackOnItselfAndZeroInput = DétecteUniquementUneEntréSurLuiMême(s) 7. AucuneEntrée = DétectionNombreDEntrée(s); 8. IsInput = DétecterSiLeSommetEstUneEntrée(s); 9. IsScanSignal = DétecterSiLeSommetEstUnSignalScan(s); 10. IsTestPoint = DétecterSiLeSommetEstUnSignalTestPoint(s); 11.

12. Si IsTestPoint OU IsScanSignal OU IsInput OU AucuneEntrée OU IsFeedbackOn ItselfAndZeroInput

13. Pour tout les voisins v connecté en sortie du sommet s 14. SupprimerArrete(s,v,G);

15. Fin Pour tout

16. SupprimerSommet(s,G) 17. Sinon Si IsMux égal Faux

18. Pour tous les voisins ve en entrée du sommet s 19. Si IsFeedbackOnItself égal Vrai

20. Si s contient ve en entrée 21. Continuer;

22. Fin si 23. Fin Si

24. Pour tous les voisins vs en sortie du sommet s- 25. Si IsFeedbackOnItself égal Vrai

26. Si s contient vs en sortie 27. Continuer; 28. Fin si 29. Fin Si 30. SupprimerArrete(ve,s,G); 31. SupprimerArrete(s,vs,G); 32. AjouterArrete(ve,vs,G); 33. Fin Pour tous

34. Fin Pour tous

35. SupprimerSommet(s,G); 36. Fin Si

37. Fin Pour tout

Algorithme 4.3 L'Algorithme de contraction de graphe représenté sous forme de pseudo-code

Définition de la dépendance des horloges à partir du graphe contracté

Une fois le graphe contracté obtenu, il ne reste plus qu’à extraire les relations entre les horloges. Par exemple, sur le graphe de la Figure 4.16 (côté gauche), on sait que pour générer son horloge, M1 est dépendant des horloges générées par M2 et M3. Il faut donc maintenant analyser le graphe contracté pour stocker les informations de dépendance dans une structure de stockage à deux dimensions comme dans la Figure 4.16 (côté droit).

M1

M2

M3

Sorties M1 M2 M3 Entr ée s M1 0 1 0 M2 1 0 1 M3 1 0 0

Figure 4.16 La dépendance des horloges représentée sous forme de graphe et de matrice

Recherche des machines à états finis

La recherche de machines à états finis intervient juste après la contraction du graphe. Le principe de cette recherche part de l’hypothèse suivante :

• un domaine d’horloge comporte une machine à états finis lorsqu’un sommet représentant un domaine d’horloge boucle sur lui-même.

Cette hypothèse est suffisante pour un design de circuit comme la machine à états finis ITC99 du banc d’essai. Mais on verra dans le chapitre sur les résultats que cette règle ne fonctionne pas pour la détection des FSM d’un circuit complexe comme le mini-MIPS. On verra dans le CHAPITRE 6 sur les résultats que les quelques détections réalisées sur le mini- MIPS sont le fruit d’erreurs de l’algorithme.