Comparaison d`un circuit électrique avec le plan spécifié

publicité
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
Téléchargement