Comparaison d'un circuit électrique avec le plan spécié Dmitriy SLUTSKIY, Daria STEPANOVA, Simon STUKER Sujet proposé par Sébastien Valette et Jean-Christophe Courrège, THALES 23 novembre 2012 Résumé Dans ce rapport nous présentons quelques méthodes logicielles pour l'étude des chiers .cif décrivant les circuits integrés. L'objectif est de simplier la comparaison entre le circuit spécié par le chier .cif et le circuit réalisé. Mots clés : Circuit intégré, format .cif, VLSI, graphe des connexions. 1 Introduction La micro-électronique est un des plus importants domaines de la technologie moderne. Les produits de l'industrie des composantes électroniques ont trouvé une large utilisation dans des nombreux secteurs. Les technologies actuelles sont de plus en plus exigeantes et demandent des circuits intégrés performants et ables dans des environnements diérents. Un circuit intégré contemporain est réalisé avec une technologie submicronique qui peut assembler des dizaines de millions de transistors de taille innitésimale sur une aire de quelques cm3 , et fonctionne à des fréquences élévées. Le nombre de transistors sur une seule puce continue à augmenter de façon exponentielle. Dans la première moitié du XXème siècle les composants électroniques étaient réalisés à l'aide de tubes à vide. Le premier transistor fut inventé à la n de l'année 1947 (J. Bardeen, W.Brattain et W. Schockley à Bell Labs). L'étape suivante du developpement électronique fut l'invention du circuit monolithique intégré en 1958 par J. Kilby à Texas Instruments. Pour répondre aux demandes des technologies en developpement, les transistors à eet de champ à grille isolée (MOSFET en anglais pour Metal Oxide Semiconductor Field Eect Transistor) apparaissent dans la fabrication des circuits intégrés dans les années 60. Les années 80 ont donné naissance aux circuits CMOS (pour Complementary Metal Oxide Semiconductor) qui sont plus adaptés à la miniaturusation. Les industries demandent des circuits intégrés comportant un nombre de plus en plus important de transistors. Les investissements nécessaires pour leur fabrication sont très importants, le seuil de rentabilité suppose la production d'un minimum de circuits intégrés par tranche, à forte valeur ajoutée. Le coût d'une usine de fabrication de circuits intégrés dépasse un milliard de dollars, c'est pourquoi la fabrication se fait rarement au même endroit que la conception. Le but de ce travail est le développement d'outils de comparaison entre la spécication d'un circuit et le circuit livré par un fabricant extérieur, an de s'assurer que les fonctionnalités demandées sont bien implémentées dans le circuit, et qu'il n'y a pas de fonctionnalités supplémentaires malveillantes. L'idée est d'analyser les données décrivant le circuit souhaité pour avoir des informations sur les zones à risque, i.e. les endroits où l'implémentation de fonctionnalités supplémentaires ou la modication de celles existantes est possible. Le chapitre 2 décrit le problème et les principaux obstacles à surmonter. On décrit rapidement les étapes principales de la conception du circuit intégré. On analyse ensuite le problème posé du point de vue de l'attaquant qui ne possède que le chier .cif et cherche à le modier avant la fabrication pour y inclure des fonctionnalités supplémentaires. Les chapitres 3 et 4 sont consacrés à l'extraction des données du chier .cif. Il s'agit d'en extraire des données brutes telles que le graphe des connexions entre rectangles, ou les propriétés physiques telles que la densité du silicium. Le chapitre 5 présente des algorithmes ecaces pour exploiter ces données. Le chapitre 6 présente l'application des outils décrits dans les chapitres précédents à un exemple de chier .cif. Et enn le chapitre 7 propose quelques 1 pistes pour la suite. 2 Position du problème Un circuit intégré est formé de plusieurs composantes qui implémentent une ou plusieurs fonctions. Des transistors sont à la base des circuits intégrés. Les microschémas sont composés essentiellement de ls réalisant les interconnections. Les ls sont disposés en plusieurs couches et les transistors se trouvent dans les couches les plus basses. Les processeurs modernes peuvent contenir de 6 à 10 couches sur une surface extrêmement réduite. Le coût important de la fabrication (successions d'étapes depôts-lithographiesgravures-dopages) des circuits intégrés impose la production par des fonderies spécialisées extérieures aux laboratoires de conception. Le fabricant est susceptible de modier le chier pour adapter la production à ses propres outils techniques. Le but de notre travail est de vérier que les fonctionnalités du circuit ainsi produit sont exactement celles demandées. Le nombre important de couches et la taille réduite des puces compliquent la tache de vérication des fonctionnalités des circuits. Il existe des méthodes de vérication matérielle telles que le découpage de la puce test et la photographie couche par couche. Ces méthodes sont souvent plus coûteuses que la production. Nous nous limiterons donc à une étude logicielle préparatoire du chier .cif en adoptant le point de vue de l'attaquant. On se focalise sur le problème de la détermination des zones les plus importantes (à risque) sur la puce. Nous étudierons en particulier la structure logique du graphe des connexions (composantes connexes, densité de connexions) et sa disposition physique sur le circuit intégré. La conception des circuits intégrés suit le schéma suivant : Création de la netlist décrivant un circuit imprimé. Elle est obtenue par synthèse logique de la description logique du circuit imprimé. Tri de la netlist, insertion des cellules d'isolation. Production du chier PDEF de données des plans des étages et de la puissance, insertion des interconnections entre les diérents niveaux logiques. À ce stade on eectue la vérication de la traçabilité du boîtier à puce. Production du chier GDSII qui représente le macro placement, l'insertion des connexions entre couches (vias). Mise en place des ls, clôture de l'intégrité du signal et du timing, xation de l'électromigration du signal, masques. A ce stade on eectue l'analyse temporelle statique du boîtier à puce. Réduction des pertes au niveau des transistors à plusieurs tensions de seuils. Insertion des condensateurs de découplage, analyse de la chute de tension RI, xation de l'électromigration de la puissance. À ce stade on contrôle la chute de tension RI du boîtier à puce. Vérication physique : la comparaison du layout au schéma électrique (Layout Versus Schematic, LVS). Envoi à la fonderie. La vérication de la conception se fait selon le modèle représenté sur la Figure 1. Les vérications eectuées assurent la réalisabilité du circuit. Le chier descriptif conçu au laboratoire fournit les données nécessaires à la fabrication du 2 Figure 1 Vérication de la conception. circuit spécié. On souhaite trouver les réponses aux questions suivantes : L'attaque : Est-il possible de le modier en un temps raisonnable de façon à y intégrer des nouvelles fonctionnalités espions ou à enlever certaines fonctionnalités existantes ? La défense : Peut-on eectuer une vérication peu coûteuse du produit fabriqué pour s'assurer du fonctionnement prévu ? On part ainsi du chier de spécication, on developpe les outils de lecture de ce chier et de la représentation des données sous une forme plus maniable. On analyse la struture du circuit en tant que graphe abstrait et la densité locale des couches de silicium et des interconnections. Cette analyse permet de déterminer les zones où l'implantation de nouveaux composants est la plus probable et indique donc les endroits à privilégier pour la vérication physique de la puce. 3 Lecture et traitement du chier (de type .cif) Dans ce rapport on présente particulièrement le travail avec les chiers de conception des circuits intégrés présentés sous la forme chier .cif qui est le format plus ergonomique pour la technologie de fabrication des composantes électroniques SCMOS (Complementary Metal Oxide Semiconductor). Le format CIF (Call Intermediate Format) est le plus couramment utilisé pour la description des circuits intégrés. C'est un format textuel qui fournit une structure des 3 bases de données commune pour l'intégration de plusieurs outils. Les descriptions en chiers CIF sont conçues en ensemble de primitives graphiques utiles pour la présentation hierarchique des formes bidimensionnelles sur les couches diérentes de la puce. On y distingue deux types de propositions : celles qui concernent la géométrie et celles qui concernenet le contrôle. Géométrie Contrôle layer(l) df passage entre couches box(b) rectangle ; wire(w) chemin ; roundflash(r) cercle ; polygon(p) gure arbitraire ; call(c) autres déclarations géométriques. début de la dénition d'un symbole ; n de la dénition d'un symbole ; dd supprimer la dénition de sousroutages ; 0-9 inclure une information supplémentaire ; end(e) pour terminer un chier CIF. df Remarque 3.1 On a mentionné dans le chapitre précédent d'autres formats utilisés pendant la conception du circuit. Le format PDEF (Physical Design Exchange Format) qui représente l'information physique intermédiaire. Le format GDSII (GDS pour Graphic Database System) est un format conçu pour le contrôle des tracés des masques photographiques des circuits intégrés largement utilisé aussi pour l'échange des chiers de spécication notamment les chiers .gds peuvent être envoyés à la fonderie pour la production du circuit en question. Le passage entre .gds et .cif étant simplement eectué à l'aide de diérents logiciels (Electric par exemple), on se limite à l'étude du dernier. 3.1 Outils de lecture et de traitement Le chier cif est un chier texte et peut donc être traité par un éditeur de texte. Compte tenu la taille du chier (la taille pour un circuit intégré réel peut atteintre plusieurs Go) nous avons utilisé Emacs pour ce travail. Le passage par un éditeur de texte est nécessaire pour la préparation au traitement mathématique : les logiciels de calcul (Maple dans notre cas) ont leur propre syntax. Il faut donc traduire. Cette préparation avec Emacs nous a fourni les listes des rectangles au format Maple. On cherche dans un premier temps à représenter les données du chier de spécication couche par couche. On distingue les niveaux de silicium et les interconnexions (les vias). Au niveaux inférieurs on retrouve les transistors P-N-P et N-P-N codés par CWN-CSP et CSN-CWP. Le contact entre les transistors est eectué aux niveaux de métal supérieurs : les couches codées par CMF et CMS reliées par les couches des interconnections (vias) CVA. On se focalise sur les couches supérieures qui connectent les transistors et créent le schéma électrique et logique du circuit (CMF, CMS, CVA). 4 Algorithmes de lecture du graphe de connexions Dans cette partie, nous allons présenter diérentes méthodes qui permettent de mieux comprendre la connectique d'un circuit à partir du chier de spécication. Cette information permettra ultérieurement de mettre en évidence les zones dotées d'une forte densité connectique, susceptibles d'être sollicitées par un composant supplémentaire malveillant. Le but de cette section est donc d'extraire du chier .cif les données pertinentes (connexions entre les rectangles, taille des 4 rectangles, densité du circuit à un endroit donné). Dans la section suivante nous exploiterons ces données pour cerner autant que possible l'organisation générale du circuit. La démarche globale est la suivante : on considère en entrée les données d'un chier .cif, extraites selon les précisions du paragraphe précédent. Il s'agit d'une liste de rectangles, identiées par leurs dimensions et leur centre. On va écrire un algorithme qui permet de déterminer si deux rectangles donnés sont physiquement en contact ou non. Un contact peut avoir lieu dans deux cas de gure : Les deux rectangles sont adjacents, et sont situées sur un même niveau. Les deux rectangles ont une intersection non vide, et sont situés à un niveau d'écart. Dans ce cas de gure, l'un d'eux est un via. On va essayer de déterminer, à l'aide d'un algorithme, quels rectangles sont connectés. Ces connexions forment un graphe que nous appelons graphe de connexion. Les n÷uds de ce graphe sont les rectangles du chier de spécication, et ces noeuds sont reliés par un arc lorsque les rectangles correspondants sont physiquement en contact. Il est alors naturel de se demander comment on va représenter ce graphe. Il existe deux façons classiques : la première est de dresser la matrice d'adjacence du graphe M = (Mi,j )i,j∈sommets , dénie par : Mi,j = 1 0 si un arc relie les sommets i et j sinon La deuxième façon classique de représenter un graphe est de dresser la liste d'adjacence L = (Li )i∈sommets dénie par : Li = {j}j∈voisins(i) Cette deuxième façon est plus compacte lorsque le graphe est peu dense. Les algorithmes décrits dans cette partie donnent chacune des descriptions. Leurs temps d'exécution sont proportionnels à la taille du résultat. On pourra choisir de restreindre la description du graphe à quelques parties bien choisies, ce qui donnera une représentation locale, avec des temps de calcul moindre. Nous avons choisi de travailler avec le logiciel de calcul formel Maple 11. Les algorithmes seront cependant présentés en langage naturel (leurs versions en langage Maple sont données en annexe). Un petit travail préliminaire est alors nécessaire : Dans Maple, les rectangles (en tant qu'objets géométriques) sont décrits par un quadruplet [x1 , y1 , x2 , y2 ], où [x1 , y1 ] sont les coordonnées de leur coin supérieur gauche et [x2 , y2 ] celles leur coin inférieur droit. 5 Figure 2 Rectangles sous format cif (en haut) et Maple (en bas) L'algorithme suivant convertit les rectangles extraits du chier .cif à ce format : Algorithme 1: ConversionRectangles Entrées : Liste de rectangles K au format du chier .cif et un tag t Sorties : Liste de rectangles L au format Maple 1 N ← Taille de la liste K 2 pour n = 1 a N faire 3 4 5 Ln ← [K[n]3 − n retourner L K[n]1 2 , K[n]4 + K[n]2 2 , K[n]3 + K[n]1 2 , K[n]4 − K[n]2 2 , t] Cet algorithme permet d'ajouter à chaque rectangle une cinquième composante, un tag, qui correspond à la couche physique où le rectangle est situé. Dans toute la suite, on suppose que cette opération a été réalisée pour l'ensemble des rectangles du chier .cif, et que les listes des diérents 6 niveaux ont été fusionnées en une seule. Cette (grande) liste contient des vecteurs à 5 composantes : les 4 prémières sont des coordonnées d'un rectangle sous format Maple, et la cinquième correspond à son niveau. A présent, on peut rééchir à un algorithme qui décide si deux rectangles sont physiquement en contact. On va utiliser les propriétés suivantes : Soient R(R1 , R2 , R3 , R4 ) et S(S1 , S2 , S3 , S4 ) deux rectangles, dont les coordonnées sont sous le format de Maple. Figure 3 Intersection de deux rectangles R et S Alors : Les rectangles R et S s'intersectent si et seulement si [R1 , R3 ] intersecte [S1 , S3 ] et [R4 , R2 ] intersecte [S4 , S2 ] Les rectangles R et S sont adjacents si et seulement si [R1 , R3 ] ∩ [S1 , S3 ] est un singleton R et S s'intersectent et ou [R4 , R2 ] ∩ [S4 , S2 ] est un singleton. Dans chaque cas de gure, l'intersection de R et S est : [R1 , R3 ]∩[S1 , S3 ]× [R4 , R2 ] ∩ [S4 , S2 ]. L'intersection de deux intervalles est réalisée par l'algorithme 2, et le calcul de l'intersection de deux rectangles est réalisé par l'agorithme 3. L'algorithme 4 utilise ce dernier, et décide si deux rectangles sont physiquement en contact. 7 Algorithme 2: IntersectionIntervalles Entrées : Deux intervalles [a, b] et [c, d] Sorties : Intervalle [BG, BD] (éventuellement réduit à l'ensemble vide ou un singleton) 1 BD ← min(b, d) 2 BG ← max(a, c) 3 si BG ≤ BD alors 4 retourner [BG, BD] 5 sinon 6 retourner ∅ 7 n Algorithme 3: IntersectionRectangles Entrées : Deux rectangles R et S Sorties : Rectangle M (éventuellement réduit à un segment, un point, ou 1 2 3 4 5 6 7 l'ensemble vide) L ← IntersectionIntervalles([R1 , R3 ], [S1 , S3 ]) H ← IntersectionIntervalles([R4 , R2 ], [S4 , S2 ]) si L 6= ∅ et H 6= ∅ alors retourner [L1 , H2 , L2 , H1 ] sinon retourner ∅ n Algorithme 4: Contact Entrées : Deux rectangles R et S , avec numéro de niveau en cinquème coordonnée 1 2 3 4 5 Sorties : Valeur Booléenne : vrai ou faux si IntersectionRectangles(R, S) 6= ∅ et |R5 − S5 | ≤ 1 alors retourner vrai sinon retourner faux n Ce test permet de faire plusieurs opérations qui nous intéressent : Etant donnée une zone rectangulaire, on peut déterminer la partie de la zone occupée par l'ensemble des rectangles. Cela permet de mettre en évidence une forte présence (densité) de cuivre dans une région physique du circuit. Déterminer la connectique du circuit, c'est-à-dire les contacts qui existent entre les diérents rectangles. Pour faciliter le premier point, on utilise une procédure qui calcule l'aire d'un rectangle : Ensuite, pour une zone rectangulaire Z , on peut donner la proportion d'aire occupée par les rectangles d'une liste L, s'ils sont disjoints : 8 Algorithme 5: Aire Entrées : Un rectangle R Sorties : Nombre réel A 1 A ← (R3 − R1 )(R2 − R4 ) 2 retournerA Algorithme 6: DensiteLocale Entrées : Une zone rectangulaire Z et une liste de rectangles L Sorties : Un nombre réel 1 S←0 2 pour R ∈ L faire 3 Int ← IntersectionRectangles(R, Z) 4 si Int 6= ∅ alors 5 S ← S + Aire(Int) 6 n 7 n S 8 retourner Aire(Z) Le deuxième point, qui consiste à déterminer les rectangles qui sont en contact, est plus délicat. A ce stade, on dispose seulement de l'ensemble des noeuds du graphe des connexions, et d'une fonction Contact : R × R → {vrai, f aux} dénie sur les couples de noeuds, à valeurs booléennes, qui indique si un arc existe entre les noeuds. Le choix de représentation du graphe des connexions s'impose ici. La matrice d'adjacence complète est alors éliminée d'oce. Pour l'obtenir il faudrait un temps de calcul quadratique en le nombre de rectangles. Même en restreignant les tests de connexion à trois couches consécutives, le temps de calcul est très important (Nous l'avons constaté sur l'exemple de la partie 4). On va donc commencer par traiter un problème légèrement plus simple : étudier un terme donné de la suite d'adjacence. C'est-à-dire : quels sont les rectangles en contact direct avec un rectangle donné ? Plusieurs méthodes ont été mises en oeuvre pour arriver à cette n rapidement, sans eectuer exhaustivement des test de contacts avec tous les rectangles. La première consistait à faire la chose suivante : pour un rectangle donné, on considère la zone bordante obtenue en ajoutant une marge sur les bord du rectangle. 9 ϵ ϵ ϵ ϵ Figure 4 Rectangle bordé d'un marge de Dans un premier temps, on isole les rectangles qui ne peuvent rencontrer cette zone pour des raisons évidentes (ils sont trop éloignés et trop petits pour la toucher). Ensuite, on eectue les test de contact avec le rectangle de départ sur cette liste réduite. Cela revient à réduire le nombre de tests de contact élémentaires au prot de tests d'intersection avec une zone donnée. Sur l'exemple de la partie 4, cette idée a permis de gagner un temps considérable sur des zones de faible connectivité. En revanche, sur des zones denses elle n'était toujours pas susamment performante. L'idée la plus aboutie et la plus performante que nous proposons est la suivante. Soit Z(Z1 , Z2 , Z3 , Z4 ) une zone rectangulaire donnée. Tout rectangle dont le bord droit est inférieur à Z1 ne peut rencontrer Z . Et tout rectangle dont le bord gauche est supérieur à Z3 ne peut rencontrer Z . La même idée s'applique aux bords haut et bas du rectangle. Cela permet d'éliminer la plupart des rectangles. Pour tirer le meilleur parti de cette idée, on a intérêt à trier à l'avance les rectangles selon leurs bords gauche, droit, haut et bas. On utilise ensuite le fait suivant. Si R(R1 , R2 , R3 , R4 ) est un rectangle de largeur inférieure à L, alors R ne peut intersecter Z que si R1 ≥ Z1 − L et R1 ≤ Z3 (voir la gure 5). Autrement dit, l'examen du bord gauche sut à éliminer la plupart des rectangles qui ne sont pas trop larges. Avant de passer aux tests de contact, on trie donc l'ensemble des rectangles par rapport à chacune de leurs coordonnées, par leur hauteur, puis par leur largeur. Les algorithmes de tri sont déjà présents dans Maple, et sont réalisés en temps au plus linéaire par rapport au nombre de rectangles. Les commandes à utiliser sont précisées en annexe. On notera simplement TriParCoordonnee( L , c) la liste de rectangles L triée par valeurs croissantes de la c-ième coordonnée, et TriParLargeur(L) (resp. TriParHauteur(L) ) la liste de rectangles L triée par largeurs croissantes (resp. hauteurs croissantes). 10 Remarque 4.0.1 Tous ces tris peuvent être réalisés en amont, à partir de l'instant où l'on dispose de la liste complète des rectangles. En l'état actuel, les algorithmes de tri les plus performants sont réalisés en temps O(n · log(n)). Si l'on s'autorise à stocker des données en mémoire, ce temps peut même être réduit à O(n). On pourra trouver une grande variété d'algorithmes de tri, avec les temps d'execution correspondants dans le cinquième châpitre du livre de Knuth [3]. La méthode que nous allons utiliser peut être réalisée de façon analogue pour les largeurs ou pour les hauteurs. Nous allons la détailer pour les largeurs. Dans un premier temps, on isole les rectangles les plus larges. On xe une proportion s comprise entre 0 et 1, et on isole la part des s plus gros rectangles. Cette opération peut être réalisée rapidement grâce au tri que nous avons fait préalablement : Algorithme 7: GrosRectangles Entrées : Une liste de rectangles L triées par largeur croissante, et une proportion s ∈ [0, 1] Sorties : Liste de rectangles M 1 N ← Taille de la liste L 2 n ← E(s · N ) 3 pour k = n a N faire 4 Mn−k+1 ← Lk 5 n 6 retourner M (La fonction E() désigne la partie entière) Figure 5 Test de contact pour la liste triée par la première coordonnée Comme nous avons trié les premières coordonnées des rectangles, on cherche simplement la plage de données de la liste triée pour lesquelles R1 est compris entre Z1 − L et Z3 . Pour le premier seuil, on procède à une recherche dichotomique. Une fois atteint ce seuil (la borne de gauche de la plage critique), 11 on procède par une recherche incrémentale pour atteindre la borne supérieure. Nous aurions pu réaliser une deuxième dichotomie à ce stade, mais on peut penser que le nombre de valeur parcourus reste petit dans cette étape. Une fois déterminée la plage de rectangles pour lesquelles Z1 − L ≤ R1 ≤ Z3 , on peut procéder à un test de contact avec Z . L'algorithme ci-dessous réalise la totalité de ces opérations : Algorithme 8: VoisinsTriLargeur Entrées : Une liste de rectangles L triées par première coordonnée, un rectangle R de cette liste, et une proportion s ∈ [0, 1]. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Sorties : Ensemble de rectangles M M ← {R} GR ← GrosRectangles(L, s) l ← GR[1]3 − GR[1]1 P R ← T riP arCoordonnee(L \ GR, 1) pour S ∈ GR faire si Contact(R, S) alors M ← M ∪ {S} n n Sinf ← R1 − l Ssup ← R3 N ← Taille de la liste P R ig ← 1 id ← N tant que ig < id − 1 faire i +i im ← E( g 2 d ) si P R[im ]1 < Sinf alors ig ← im sinon n n id ← im i ← ig tant que P R[i]1 < Ssup faire si Contact(R, P R[i]) alors n M ← M ∪ {P R[i]} i←i+1 n retourner M Remarques 4.0.2 Les listes GR et P R dans cet algorithme contiennent respectivement les 10% des rectangles (si s = 0.1) les plus larges et les 90% des rectangles les plus ns. La liste P R est par ailleurs triée par la prémière coordonnée. En vérité, nous n'avons pas réalisé ce tri au cours de l'algorithme : P R peut être obtenu en prenant la liste complète, triée par la première coordonnée, et en y retranchant sa n, qui forme GR. Les lignes 15 à 20 correspondent à la recherche dichotomique de la borne de gauche de la plage critique. 12 On peut produire une version analogue VoisinsTriHauteur pour les hauteurs. Lorsque nous avons aaire à un rectangle donné, on observe largeur et hauteur. Lorsque le rectangle est n (petite largeur, forte hauteur) l'algorithme VoisinsTriLargeur a de meilleures chances d'aboutir rapidement. Lorsque le rectangle est aplati (grosse largeur et petite hauteur) c'est VoisinsTriHauteur qui sera plus performant. On peut donc créer sans diculté un algorithme VoisinsTri qui choisit pour un rectangle donné l'algorithme le plus adapté parmi VoisinsTriHauteur et VoisinsTriLargeur, et qui renvoie l'ensemble des voisins directs. Dans la partie suivante, nous allons étudier les propriétés du graphe des connexions. Avec les algorithmes que nous venons de voir, on peut donner un terme de la liste d'adjacence du graphe, c'est-à-dire produire pour un rectangle donné l'ensemble de ses voisins. 5 Outils d'analyse théoriques du graphe des connexions Avec le travail réalisé dans la partie 2, nous disposons à présent d'un graphe qu'il convient d'étudier. La question posée initialement peut être formulée de la façon suivante : "Dans ce graphe, quelles zones sont susceptibles d'accueillir un composant malveillant ?" Le risque d'une zone peut être quantié de plusieurs manières. Nous allons tenir compte des contraintes d'un constructeur malveillant pout identier les zones les plus intéressantes (et donc les plus risquées). Le moins que nous puissions soupçonner, c'est qu'il demeure une cohérence spatiale au cours de l'implantation : Les composant prévus initialement dans le chier .cif restent présents, et un composant supplémentaire serait nécéssairement situé dans une zone peu dense. En conséquence, les zones à forte densité de cuivre présentent un faible risque, puisqu'elles laissent peu de place au constructeur malveillant. La procédure DensiteLocale donne la densité dans une zone rectangulaire, et permet d'identier les zones les plus désertiques du circuit. La deuxième caractéristique qui paraît indispensable pour un composant malveillant est un accés susamment riche aux diérentes parties du circuit. D'une part, il y a des parties qui sont nécéssaires au fonctionnement du composant : alimentation, horloge, ... D'autre part, le composant veut avoir une inuence (néfaste) sur le fonctionnement du circuit : fuite d'informations, transgression d'une sécurité, retardement du fonctionnement d'autres zones (par création d'une fausse horloge)... Le composant malveillant aura donc également besoin d'un bon accès aux sorties du circuit. Ces deux point suscitent donc un intérêt accru pour les zones de forte connectivité, c'est-à-dire celles qui sont connectées aux parties les plus sensibles du circuit. Bien que ces parties ne soient pas indiquées dans un chier .cif, le constructeur peut avoir une bonne idée de la localisation de ces zones et guider la recherche. Au cours de la semaine de travail nous nous sommes seulement intéressées aux zones qui possèdent un grand nombre de connexions. Étudier seulement le degré d'un noeud ne donne pas susamment d'information sur son importance. Un noeud de degré 2, faisant oce d'interconnexion, peut avoir un rôle crucial du point de vue logique. On va donc s'intéresser plutôt à ses voisins au second degré, troisième degré, etc... Pour mesurer si le sous-graphe de ces noeuds voisins (à un certain ordre) s'étale sur une grande région, on peut regarder son rayon. C'est la plus grande distance d'un voisin 13 (d'un certain degré) au noeud de départ. Cette information rend un noeud plus ou moins sensible : s'il accède à des zones éloignées du circuit, il est considéré comme plus important. Pour un noeud donné et un ordre de voisinages croissant, on va dresser un prol. Ce dernier est composé d'une part de l'évolution du nombre de voisins, et d'autre part de l'évolution du rayon, lorsqu'on augmente progressivement le degré de voisinage. Il est calculé à partir de l'algorithme suivant : Algorithme 9: Prol Entrées : Une liste de rectangles L, un rectangle R de cette liste, et un degré de voisinage d. Sorties : Deux listes (Vi )i et (ri )i où pour chaque i, Vi est un entier et ri un réel positif. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 V0 ← 1 r0 ← 0 O ← {R} F ← {R} G ← {R} pour i = 1 a d faire pour f ∈ F faire G ← G ∪ V oisinsT ri(L, f ) n F ←G\O O ←O∪G Vi ← Card(O) ri ← max(ri−1 , max(distance(R, f ), f ∈ F )) n retourner V, r En sortie, la i-ème composante de la liste V , Vi indique le nombre de voisins de R de degré inférieur ou égal à i, tandis que ri désigne la distance maximale de R à l'un de ces voisins. Typiquement, un noeud situé au sein d'un zone de forte connexité va voir V croître rapidement et r très lentement. Le graphe admet une partition en composantes connexes. La composante connexe d'un rectangle est l'ensemble des rectangles qui lui sont connectés, directement ou indirectement. C'est donc l'ensemble de tous les voisins, sans considération d'ordre de voisinage. On devine que chacune de ces composantes connexes correspond à une fonctionnalité spécique. Il n'est pas si simple et rapide de déterminer ces composantes. Avec quelques légères modications sur l'algorithme Prol ci-dessus, on peut donner la composante connexe issue d'un noeud donné : Tout comme pour l'agorithme Prol, on utilise une démarche de diusion. On part d'un noeud, et on note l'ensemble ses voisins. Ensuite on ajoute à cet ensemble tous les voisins des noeuds ajoutés à la dernière étape. On dénote F les nouveaux noeuds (comme frontière ). On ne peut malheureusement pas garantir l'aboutissement de cet algorithme en temps court. Sa durée de calcul dépend fortement de la structure du graphe, et du noeud de départ choisi. Une autre façon intéressante d'étudier le graphe des connexions est de le partager en sous-graphes (communautés), en s'assurant que ces sous-graphes soient faiblement interconnectés. Le problème devient alors un peu plus simple 14 Algorithme 10: ComposanteConnexe Entrées : Une liste de rectangles L, un rectangle R de cette liste. Sorties : Un ensemble de rectangles O 1 O ← {R} 2 F ← {R} 3 G ← {R} 4 tant que F 6= ∅ faire 5 pour f ∈ F faire 6 G ← G ∪ V oisinsT ri(L, f ) 7 n 8 F ←G\O 9 O ←O∪G 10 n 11 retourner O car on s'autorise du relâchement : on partitionne l'ensemble des noeuds, mais on n'exige pas que les sous-graphes obtenus soient déconnectés. On parle alors de "coupe du graphe" et non de "partitionnement". Le défaut de partitionnement peut alors s'exprimer en nombres d'arêtes "fautives". Ce sont les arêtes reliant des noeuds de deux parties distinctes. Le coût d'une coupe est déni comme le nombre d'arêtes fautives. Il existe de nombreuses méthodes de partitionnement de graphes qui tentent de minimiser le coût de la coupe. On peut citer les méthodes d'expansion de région, qui utilisent un principe similaire à l'algorithme ComposanteConnexe : Pour réaliser une k-partition, on démarre avec k noeuds choisis dans le graphe (de façon aléatoire éventuellement). Ces k noeuds constituent les premières parties de la partition incomplète. Ensuite, à chaque étape, chaque ensemble trouve parallèlement les noeuds avec qui ils ont le plus grand nombre de connexions, et absorbe ces noeuds. On répète cette opération jusqu'à ce qu'il ne reste plus de noeuds libres. Une autre méthode de partitionnement utilisée est celle des centres mobiles. On xe à nouveau le nombre de parties k de notre partition, et on choisit k noeuds aléatoirement dans le graphe. Ensuite, à chaque étape, chaque noeud du graphe est assemblé à son centre de gravité le plus proche. On obtient ainsi une k -partition. On calcule ensuite les k centres de gravité de chaque partie, et on recommence l'opération. La méthode se termine lorsque les centres de gravité restent immobiles. Lorsque on ne connait pas le nombre de classes à l'avance, ni la taille de chaque classe, on doit faire appel à d'autres méthodes de partitionnement. Une piste intéressante, que nous n'avons pas pu étudier faute de temps est d'appliquer les principes de la détection de communauté aux circuits. Ces techniques sont utilisées dans les réseaux sociaux par exemple pour détecter des groupes d'amis, ou des personnes partageant un même loisir. Il existe une grande variété de méthodes pour arriver à cette n. On pourra trouver un résumé dans l'article de Satu Elisa Schaeer [5] et l'état de l'art de la thèse de Pascal Pons [4]. Nous allons à présent mettre ces méthodes en oeuvre sur un exemple. 15 6 Etude d'un exemple 6.1 Inventaire et visualisation de contenu du chier cif. Comme nous l'avons détaillé dans les parties précédentes, les chiers de spécication donnent lieu à des graphes de connexion. Ces graphes ne sont pas quelconques et possèdent des caractéristiques particulières. Une énigme bien connue illustre un problème au coeur de la conception des circuits multi-couches : trois maisons souhaitent se connecter individuellement au gaz, à l'électricité et à l'eau courante sans jamais croiser cables, ls et tuyaux de connexion. Figure 6 Enigme eau, électricité et gaz Nous savons que cela est impossible, à cause des propriétés des graphes planaires. Un graphe planaire est un graphe qui peut être plongé dans un plan (sans que deux arêtes se coupent). Pour de tels graphes, il existe des relations sur le nombre de noeuds et d'arêtes qui interdisent certaines situations. Citons par exemple celle qui répond négativement à l'énigme : Proposition 6.1.1 et f faces, alors Soit un graphe planaire connexe ayant n sommets, a arêtes, n − a + f = 2. C'est justement ce type de limitations qui impose d'avoir plusieurs couches sur un circuit. Maintenant, si l'on restreint le graphe aux rectangles d'un même niveau, les propriétés des graphes planaires sont évidemment vraies. La règle principale des vias est qu' ils ne connectent que deux rectangles de deux niveaux successifs, et qu'ils n'ont jamais de contact avec d'autres vias. Ces propriétés particulières justient le fait que nous avons voulu travailler avec un réel chier .cif plutôt qu'un graphe généré aléatoirement. Un graphe aléatoire n'aurait certainement pas eu ces caractéristiques typiques d'un circuit multi-couches. Nous avions à disposition un chier particulièrement facile à analyser, puisqu'il ne disposait que d'un seul module. Il n'y a donc pas eu besoin de recomposer le circuit physique en introduisant les diérents symboles avec les transformation correspondantes. 16 Le chier traîté avait une taille de 11 Mo, ce qui est relativement petit. Les circuits réalisés de nos jours ont des chiers .cif pouvant aller jusqu'à 100 Go. Nous avons cependant constaté que certains algorithmes ont eu un temps de calcul important pour ce "petit" chier. Après extraction (à l'aide du logiciel Emacs), le nombre de rectangles dans chaque couche était : CMS : 319 CVA : 162988 CMF : 3668 CCA : 188852 CCP : 6630 CAA : 1222 CSP : 494 CSN : 568 CWP : 220 CWN : 256 COG : 40 XP : 40 Ces abréviations, propres aux chiers .cif et à la technologie utilisée (ici SCMOS) ont des signications qui ne nous intéressent pas. De plus elles peuvent nous induire en erreur. Nous n'allons pas entrer dans le détail sur les architectures de la technologie SCMOS, mais seulement identier les parties qui nous intéressent. Contrairement aux apparences, ce circuit est composé de 2 couches de connecteurs, CMF et CMS, reliées entre elles par le niveau CVA. Ci-dessous leurs représentations, dans la précision permise par notre visionneur d'images : 17 Figure 7 La couche CMS 18 Figure 8 La couche CMF La couche CVA n'est pas représentée à cause des limitations graphiques de notre poste. Les transistors sont obtenus grâce à la superposition des couches CWN / CWP et CSN / CSP. Plus précisément, il existe deux types de transistors : le transistor de type N-P-N est obtenu en déposant deux métaux dopés "N" (appelés source et drain ) sur un métal de type "P" (appelé base ) et vice-versa pour le transistor P-N-P. Les deux niveaux CWP et CWN sont situés sur un même niveau et correspondent aux bases des diérents transistors (notez que leur diérence est située dans la compositions N ou P). Les niveaux CSP et CSN correspondent aux sources et drains déponsés sur ces bases et vivent également sur un même niveau. Ci-dessous leurs représentations, où l'on a identié en rouge les métaux dopés P et en bleu les métaux de type N : 19 Figure 9 La couche CSN+CSP Figure 10 La couche CWN+CWP Ces couches CW et CS sont reliées par le niveau CAA, qui fait simplement oce de connecteur. Nous l'avons omis car il n'a aucun impact sur la topologie des connexions : il calque simplement les connecteurs des transistors. Voici sa représentation : 20 Figure 11 La couche CAA En revanche, les niveaux CCA et CCP (situées sur une même couche) sont cruciaux, car ils viennent eectuer le contact entre les transistors et la couche CMF. Leur diérence est que CCA connecte les sources/drains et que CCP connecte les bases. Nous n'avons pas pu représenter ces couches, car elle sont composées d'un nombre de rectangles très important. Pour des raisons de mémoire, le visionneur d'images de Maple n'est pas parvenu à acher cette couche. Finalement, les couches COG et XP ont pour seul objectif d'isoler et de rendre accessible les 40 connecteurs du circuit (gros rectangles apparents "à l'extérieur"), et seront donc omises dans l'étude. Notez que ces connecteurs feront oce d'entrées/sorties dans le fonctionnement du circuit. Compte tenu de ces remarques, la disposition physique des couches est donc la suivante : CMS CVA CMF CCA + CCP CSN + CSP CWN + CWP Les couches les plus riches dans cette disposition physique sont les couches CVA et CCA + CCP. Au cours de l'exécution des diérents algorithmes, il s'est eectivement avéré que celles-ci viennent augmenter fortement le temps d'execution. La cause principale est que les vias sont souvent doublés : deux rectangles (sur CMF et CMS par exemple) sont parfois reliés par plusieur vias. Une démarche possible, que nous n'avons pas abordée ici, est d'éliminer dans un premier temps tous les vias superus : si un via connecte deux rectangles, 21 tous les autres vias connectant ces deux mêmes rectangles sont identiés au premier. Une telle démarche n'altère pas la topologie logique du circuit, mais réduit grandement le nombre de rectangles en entrée. 6.2 Etude de la structure physique du circuit. Tout d'abord, on peut eecteur une étude de la géographie du circuit. On constate sur les gures [NUMEROS] que le circuit est constitué de deux couronnes rectangulaires, avec la couronne intérieure qui est située au-dessus des transistors N-P-N et la couronne extérieure au-dessus des transistors P-N-P. Nous avons départagé cette périphérie en 20 zones rectangulaires, et déterminé la densité de cuivre dans ces zones sur les 6 niveaux du circuit. Ces diérentes densités sont représentées par des niveaux de gris, plus foncés pour les zones les plus denses, sur la gure suivante : Figure 12 Densité moyenne de cuivre dans chaque zone On a constaté sur les images physiques du circuit que certaines zones sont denses, mais qu'elles contiennent peu de rectangles. On a donc également représenté par des teintes de gris les niveaux les plus riches en rectangles. 22 Figure 13 Nombre de rectangles dans chaque zone On peut alors se faire une idée simpliée des zones à risque : ce sont les zones peu denses, contenant peu de rectangles. En eet, si une zones contient beaucoup de rectangles, et qu'elle est dense en cuivre alors ça sera automatiquement plus dicile d'y apporter des modications. En revanche, il est clairement plus facile de changer une zone contenant quelques gros rectangles plutôt qu'un zone dense, parsemée d'un grand nombre petits rectangles. On peut alors considérer dans chaque zone le produit densité de cuivre × densité de rectangles. En voici la représentation par niveaux de gris : 23 Figure 14 Produit du nombre de rectangles et de la densité de cuivre dans chaque zone Cette approche met en avant les "coins" du circuit. Dans ces zones, les rectangles sont relativement gros par rapport à leur nombre. En réduisant leur taille, sans altérer leurs connexions, il devient aisément possible de libérer une partie du circuit et d'y implanter une fonctionnalité supplémentaire. 6.3 Etude de la structure logique du circuit. Passons maintenant à l'étude de la topologie logique. On peut dejà s'en faire une idée grossière en étudiant le degré moyen par noeud dans chacune des 20 zones indiquées précédemment. Dans la gure suivante, on a représenté par des niveaux de gris ces degrés moyens. 24 Figure 15 Degré moyen par noeud dans chaque zone. Une zone plus foncée indique un fort degré moyen, et donc un risque accru de présence de composants supplémentaires. En l'occurence, toutes les zones ont pratiquement le même degré moyen. La raison est simple : comme le circuit est majoritairement constitué de vias (voir cardinaux en début de partie), le degré dans chaque zone est proche de 2. Sur le chier que nous avons étudié, cette approche nous donne donc peu de renseignements intéressants. En exécutant les algorithmes qui donnent les voisins directs de chacun des rectangles, nous avons pu réaliser la liste d'adjacence complète du circuit. En d'autres termes, en utilisant judicieusement les algorithmes, nous avons pu calculer et stocker la suite (Vi )i∈Rectangles dénie par Vi = {j}j∈V oisins(i) Cette opération a pu être eectué en peu de temps grâce à une simplication du problème. On a constaté que le calcul des rectangles voisins aux vias (niveaux CVA et CCA+CCP) prenaient un temps très important par rapport aux autres rectangles (toujours à cause du problème articiel des nombreux vias parallèles). Nous avons donc, dans un premier temps, déterminé les voisins de tous les autres rectangles. Ensuite, on a simplement obtenu les voisins direct des vias en croisant les listes d'adjancence des couches susceptible d'entrer en contact avec les vias. Plus précisémént, à partir de la liste d'adjacence du niveau CMS et CMF, on peut déterminer la liste d'adjacence de la couche CVA. En eet, on sait que chaque rectangle de la couche CVA est connecté à deux rectangle, un (et un seul) sur la couche CMF et un (et un seul) sur la couche CMS. Il sut donc, pour un rectangle de CVA donné, de rechercher les deux voisis directs (un sur CMF, un sur CMS). Une fois que nous avions à disposition la liste d'adjacence complète, il était possible de déterminer les diérentes composantes connexes du circuit. Lors25 qu'aucune contrainte n'est imposée, nous avons découvert que le circuit n'en possédait qu'une ! En plus simple : tous les rectangles du circuit sont interconnectés, via des transistors éventuellement. Ce résultat nous a conforté dans l'idée que ce circuit ne possède qu'une seule fonctionnalité. On a ensuite réalisé une étude fonctionnelle en limitant les composantes connexes aux transistors. Cette étude a été réalisée en restreignant l'étude aux niveaux CMS+CVA+CMF, c'est-à-dire à la structure du circuit. On laisse donc provisoirement de coté les transistors. On calcule donc les composantes connexes des trois niveaux CMS+CVA+CMF réunis. Nous avons découvert que le circuit résultant est composé de 40 composantes connexes, et que chaque composante connexe contient un des connecteurs extérieurs. On a alors décidé de numéroter les connecteurs dans le sens des aiguilles d'une montre, en commençant par celui situé en haut à gauche du circuit, comme l'indique le schéma suivant : Figure 16 Numérotation des connecteurs. La fonctionnnalité du circuit est obtenu par l'interaction des diérentes composantes connexes via les transistors. Ce que nous avons constaté est que parmi les 40 composantes connexes, 38 ont une géométrie similaire. Prenons par exemple la composante connexe numéro 1, qui en fait partie. Nous avons tenté de la représenter, et adoptant un code couleur : en vert, ses rectangles situés sur la couche supérieure CMS, en rouge ses rectangles CMF, et en bleu les parties des transistors en contact avec la composante connexe. 26 Figure 17 Représentation de la composante du connecteur 1, à gauche sa partie CMS, à droite ses parties CMF et CSN+CSP. On a constaté que les composantes connexes des connecteurs 1 à 4, de 6 à 20 et de 31 à 40 sont toutes superposables à celle-ci (à rotation près). En revanche, les connecteurs 21 à 25 et de 27 à 30 ont la forme suivante (en adoptant le même code couleur) : Figure 18 Représentation de la composante du connecteur 21, à gauche sa partie CMS, à droite ses parties CMF et CSN+CSP. Les exceptions à cette règle sont les connecteurs 5 et 26. Ce sont les seuls connecteurs connectés à des "bases" de transistors. En voici les représentations, en représentant en jaune les bases des transistors (couche CWN+CWP) connectées : 27 Figure 19 Représentation de la composante du connecteur 5. 28 Figure 20 Représentation de la composante du connecteur 26. On constate que ces compsantes sont presque omniprésentes dans le circuit. Nous aurions pu arriver à cette conclusion en dressant le prol des connecteurs, c'est à dire en se basant sur des données locales. Voici ce que donne l'algorithme Prol pour le connecteur 1, de type ordinaire : 29 Figure 21 Prol du connecteur 1 (En rouge le rayon, en bleu le nombre de voisins). alors que le prol de connecteur 5 est : Figure 22 Prol du connecteur 5 (En rouge le rayon, en bleu le nombre de voisins). et celui du connecteur 26 (NB : l'échelle de l'axe des ordonnées a du être modiée pour visionner complètement le prol) 30 Figure 23 Prol du connecteur 26 (En rouge le rayon, en bleu le nombre de voisins). Ces deux derniers prols indiquent une forte connectivité à une distance importante, ce qui est cohérent avec l'omniprésence des composantes connexes en question. Les connecteurs 5 et 26 ont donc des rôles importants dans le circuit, ce qui signie que leurs composantes connexes ont de fortes chances d'être sollicitées par un composant malveillant. Cela ne limite malheureusement que peu le champ de recherche, car ces composantes sont plutôt vastes. Une autre chose qui saute aux yeux est que le connecteur 11 a son rayon qui stagne, alors que son nombre de voisins croît de façon explosive. Cela indique que à une distance de 27500 de ce connecteur, sa composant connexe est dense en rectangles. Le cercle centré au connecteur 11 de rayon 27500 est donc un lieu intéressant de ce point de vue. On peut également réaliser une étude en inversant les rôles connecteurstransistors. En d'autres termes : plutôt que de s'intéresser à l'interaction des composantes connexes via les transistors, on peut réaliser l'étude ponctuelle de chaque transistor pour en déduire le plus sollicité. L'algorithme Prol convient parfaitement pour cette tâche. Il y a en tout 136 transistors dans le circuit, et nous n'allons pas dresser exhaustivement le prol de chacun. Prenons par exemple le transistor P-N-P situé juste en dessous du connecteur 5. 31 Figure 24 Transistor étudié. Son prol est le suivant : Figure 25 Prol du transistor étudié (En rouge le rayon, en bleu le nombre de voisins). Ici encore, le rayon a tendace à stagner, tandis que le nombre de voisins 32 croît assez rapidement. Cela signie que la zone d'inuence majeure de ce transistor est situé à une distance d'environ 35000 unités. En recoupant les zones d'inuence des diérents transistors, on peut mettre en avant des parties sensible, qui permettent de restreindre la vérication du circuit. Une chose qui a pu être réalisée, mais qui dépasse largement l'objectif xé initialement, est la représentation complète de la fonction logique du circuit. Nous pouvons dresser le schéma logique qui lie les diérents connecteurs aux transistors. En voici un schéma succint : Figure 26 Schéma logique du circuit. Dans ce schéma, les èches représentent une connexion à toute la rangée désignée. Par exemple, le connecteur 5 est connecté à toutes les bases de la rangée de gauche (rouges et bleues) et tous les connexions sources et drains bleues, ce qui est représenté par les trois éches du coin supérieur gauche. 6.4 Commentaires et remarques. Finalement, après ces étude purement formelle du circuit, il demeure des choses que l'on voit mais qui ne sont pas apparues dans les diérents indicateurs. Les connecteurs, situés à l'extérieur des deux couronnes, n'occupent 33 pas complètement la périphérie. De plus, les transformateurs sont situés seulement aux endroits où se trouvent des connecteurs (voir schéma CSN+CSP). Il semble alors possible d'ajouter des transistors aux endroits "vacants" de la couche CSN+CSP, et d'ajouter un connecteur à proximité. Une telle modication pourraît être détectée en étudiant la densité de rectangles ou de métal avec une résolution un peu meilleure. On peut aussi envisager des tests logiques, c'est-à-dire des tests sur le fonctionnement électronique du circuit. Une fois connues les composantes connexes des niveaux CMS+CVA+CMF, on pourrait mesurer la résistance entre deux connecteurs donnés. S'ils sont dans la même composante connexe on doit mesurer une résistance faible. S'ils sont dans des composantes connexes diérentes, le courant ne doit pas s'établir. Faute de connaissances précises sur ces techniques, nous n'allons pas insister sur ce point. Une autre chose qui saute aux yeux est que les composantes des connecteurs 5 et 26 occupent de vastes parties du circuit, mais qu'elles sont séparées par une très petite distance à certains endroits. Un peut alors penser qu'il est facile de les mettre en contacts pour nuire au fonctionnement du circuit, ou créer des court-circuits. Sans connaissance précise du fonctionnement du circuit, on peut dicilement savoir si une telle corruption est réellement envisageable. Une solution possible à ce problème est d'évaluer toutes les distances mutuelles (minimales) séparant deux composantes connexes du circuit. Ce ne devrait pas être dicile car il y a peu de composantes connexes CMS+CVA+CMF (en tout cas beaucoup moins que de rectangles ...). Maintenant que nous avons mis en évidence diérentes méthodes pour détecter des zones à risque, on peut rééchir à la qualité de notre résultat. Malheureusement, nous n'avons pas pu approfondir cette réexion autant que nous l'aurions souhaité. Par exemple, si l'on considère le découpage en 20 zones (voir les gures 12 et 6.2), et que l'on parvient à valider la conception d'une zone donnée, quelles garanties pouvons nous donner sur l'adéquation du circuit ? Plusieurs réponses sont possibles : En termes de volume : Un vingtième du circuit physiquement adéquat (y compris les zones dépourvues de cuivre). En termes de rectangles : Une proportion de rectangles pr placés correctement. En termes de cuivre : Une proportion pc de cuivre correctement située. En termes logiques : Un nombre Nc de connexions assurées correctement. En termes logiques, variante : Un nombre Ns de séparations logiques assurées correctement. En limitant les méthodes statistiques au simple échantilonnage, les résultats obtenus sont insatisfaisants. En eet, pour chacun des critères donnés ci-dessus, les garanties données sont très faibles. Prenons la vérication en termes de volume : en contrôlant un vingtième du volume du circuit, on ne peut donner une garantie d'adéquation au-delà de 5%. Le densité de cuivre étant à peu près homogène sur le circuit (voir gure 12), on arrive à un résultat aussi insatisfaisant en raisonnant en termes de densité de cuivre. Nous n'avons pas abouti à une réelle solution pour ce problème, d'autant plus que nous n'avons pas réellement accordé plus d'importante à un critère qu'à un autre dans l'identication des zones à risque. On a toutefois la conviction que lorsque la fonction du cicuit est connue, et que le rôle de chaque connecteur est bien déterminé, il est possible de classier les critères. Donnons un exemple simple : dans la plupart des 34 circuits imprimés, la fonctionnement synchronisé des transistors est assurée par un connecteur faisant oce d'horloge. On appelle couramment ce connecteur "clock". Il est évident que sans accéder à la composante de ce connecteur il est impossible d'altérer le fonctionnement du circuit de façon écace. Le connecteur clock est donc prépondérant et les zones à risque, données par l'étude de son prol, donnent une excellente garantie sur l'adéquation du circuit. En poussant ce raisonnement à l'extrême, on pourrait imaginer le scénario suivant : on s'attend à une altération du connecteur clock, qui présente 3 zones à risque. En vériant l'une de ces zones, on donne une garantie d'adéquation d'environ 33% sur le fonctionnement de l'horloge. On suggère donc de classier les composant par "importance", dans la mesure où cela est possible. Clairement, une telle approche demande la connaissance parfaite du rôle du circuit et des diérents connecteurs. 35 7 Conclusion et perspectives Après la description détaillée de nos idées, et un premier aperçu des résultats qu'elles permettent d'obtenir, on peut dresser un bilan provisoire. Revenons d'abord à la question initialement posée : "Peut-on mettre en évidence des zones de vérication pour garantir l'adéquation d'un circuit imprimé à son chier de spécication ?". Nous avons essayé de répondre à la question inverse : "Peut-on mettre en évidence des zones susceptibles d'être modiées, à partir du chier de spécication ?", et recherché des zones présentant de l'intérêt dans le circuit. Pour cette recherche, nous avons étudié deux aspects du circuit : L'aspect physique, la forme géographique du circuit. L'apect logique, la connectique du circuit. Nous avons mis en place divers algorithmes pour calculer des invariants liés à chacun des aspects. Comme les chier étudiés ont une taille importante, nous avons pris la précaution de donner seulement des algorithmes avec des temps d'exécution linéaires en la taille de l'entrée. En ce qui concerne l'étude physique, les principaux indicateurs présentés sont le nombre de rectangles et la densité de rectangles dans une zone donnée. Pour les indicateurs logiques, on s'intéresse à des invariants locaux classiques des graphes : degré, degré moyen par noeud, n-voisinages, et rayon d'un voisinage. Dans la partie consacrée à l'exemple, les résultats présentés sont aisément interprétables, et fournissent des indications sur d'éventuelles zones à risque. En utilisant judicieusement les algorithmes, nous sommes ensuite parvenus à donner la structure logique complète du circuit, ce qui dépasse quelque peu le cadre du sujet. Elle est néanmoins intéressante, puisqu'elle permet d'identier des composantes connexes les plus importantes, et d'en dégager notamment deux qui sont réellement omniprésentes dans le circuit. Cette information n'aurait pas pu sortir d'une étude locale ou ponctuelle d'une partie du circuit. Bien que notre démarche soit tout à fait justiée sur le plan théorique, et exécutable en temps relativement court sur le chier traîté, elle présente quelques défauts. Compte tenu des tailles des chiers de spécication actuels, il se peut que les temps d'exécution des algorithmes présentés soient très important sur un exemple réaliste, de l'ordre de plusieurs jours. Cela réduit tout de même le délai annoncé initialement de 2 ans, mais reste cependant long. Ensuite, nous avons pu examiner la connectique de chaque connecteur extérieur du circuit, car il n'y en avait que 40. Il faudrait une démarche plus méthodique lorsque ce nombre est plus important. Il demeure par ailleurs quelques points qui pourraient être développés davantage. Un premier est le parsing des chiers cif. Nous avons eu accès à un chier constitué d'un seul module, or en général les chiers cif sont composés de plusieurs modules. Ceux-ci sont assemblés par des procédures qui font intervenir des transformations de type translation, rotation, symétrie. Cette tâche n'est pas la plus compliquée, et nous ne l'avons pas détaillée. Ensuite, sur les méthodes employées, on pourrait proposer de nouvelles approches. Il existe des méthodes de coupe de graphes que nous n'avons pas étudiées, et qui pourraient donner des information intéréssantes sur la structure. Hormis les méthodes classiques mathématiques (voir par exemple les articles [1] et [2]) on peut penser aux techniques de détection de communautés (voir [5] ou [4] ). Ces méthodes, utilisées habituellement dans les réseaux sociaux, possèdent des algorithmes de calcul distribués très ecaces sur des chiers de grande 36 taille. Finalement, le point le plus important, que nous n'avons pas réellement eu le temps d'aborder en profondeur, est celui de la qualité de nos résultats. Quelle garantie pouvons nous donner en éliminant les zones à risque mises en évidence par nos algorithmes ? Cette question mérite réexion, et nous pensons que la réponse est fortement liée au fonctionnement du circuit. 37 Références [1] Ulrich Elsner and A Survey. Graph partitioning - a survey, 1997. [2] Jin Kim, Inwook Hwang, Yong-Hyuk Kim, and Byung-Ro Moon. Genetic approaches for graph partitioning : a survey. In Proceedings of the 13th annual conference on Genetic and evolutionary computation, pages 473480. [3] Donald E. Knuth. The Art of Computer Programming, Volume III : Sorting and Searching. 1973. [4] Pascal Pons. Détection de communautés dans les grands graphes de terrain. PhD thesis, Université Paris 7 - Denis Diderot, 2007. [5] Satu Elisa Schaeer. Graph clustering. Computer Science Review, 1(1) :27 64. 38 8 Annexe : Algorithmes en langage Maple. > > > > > > > > > > 39 > > > > > > > > 40 > > > > > > > 41