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 = FAUXFigure 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 0Figure 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.