Changes between Version 29 and Version 30 of ToolsCourseTp6
- Timestamp:
- Sep 20, 2008, 7:03:50 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ToolsCourseTp6
v29 v30 1 1 {{{ 2 2 #!html 3 <h1> TP6 : Dessin de cellules précaractérisées</h1>3 <h1> TP6 : Placement/routage </h1> 4 4 }}} 5 5 [[PageOutline]] 6 6 7 7 = 1 Objectif = 8 9 Nous avons vu dans le TP5 comment dessiner une cellule précaractérisée respectant le gabarit de le bibliothèque '''SXLIB'''. 10 Le but de ce TP6 est de réaliser le dessin des masques d'un bloc combinatoire résultant de l'interconnexion d'une quinzaine de cellules de la bibliothèque '''SXLIB'''. 8 11 9 Le but de ce TP est de vous apprendre à utiliser l'éditeur graphique '''graal''', et différents 10 outils de vérification, pour réaliser le dessin des masques de deux cellules précaractérisées respectant 11 le gabarit de la bibliothèque '''SXLIB'''. 12 On va donc effectuer ''à la main'' (c'est à dire en utilisant l'éditeur interactif '''graal'''), le placement et le routage de cet opérateur, pour mieux comprendre les problèmes que doivent résoudre les outils de placement/routage automatiques. 12 13 13 On dessinera tout d'abord la cellule '''inv_x1''', puis on dessinera la cellule '''na2_x1'''. 14 = 2 Spécification fonctionnelle = 15 16 On souhaite réaliser le décodeur 3 vers 4 tel que décrit ci-dessous. 14 17 15 = 2 Outils CAO utilisés = 18 [[Image(compteur.jpg,nolink)]] 16 19 17 L e dessin des masques des cellules manipulées par la chaîne de CAO '''Alliance''' utilise18 la technique de dessin symbolique sur grille fixe, pour permettre la migration technologique.20 La sortie Zi prend la valeur 1 quand le nombre de bits d'entrée ayant la valeur 1 est égal à i. 21 Les 3 autres sorties prennent la valeur 0. 19 22 20 ftp://asim.lip6.fr/pub/amd2901/symb_rules00-1.pdf 23 Les équations sont les suivantes : 24 * Z0=/A./B/./C 25 * Z1=(A./B./C)+(/A.B./C)+(/A./B/.C) 26 * Z2= (A.B./C) +(A./B.C)+ (/A.B.C) 27 * Z3=A.B.C 21 28 22 Tous les fichiers contenant la vue physique (dessin des masques) possèdent l'extension '''.ap''' 23 (comme Alliance Physique). 29 De ces équations , on déduit le schéma en portes logiques inverseuses : 24 30 25 == 2.1 GRAAL == 31 [[Image(schema.jpg,nolink)]] 26 32 27 L'éditeur de layout '''graal''' manipule plusieurs types d'objets que l'on peut 28 créer avec le menu CREATE : 29 * Les instances (importation de cellules pré-existantes) 33 Le bloc à réaliser contient donc 10 portes NAND3 et 5 inverseurs. 34 Regardons plus précisément les caractéristiques de chaque cellule : 30 35 31 * Les segments : DiffN, DiffP, Poly, Alu1, Alu2 ... 36 * La cellule na3_x1 a une largeur de 5 pitchs. 37 * Les 3 signaux d'entrée E1, E2 et E3 sont accessibles sur 6 pistes de routage. 38 * Le signal de sortie S est accessible sur 7 pistes de routage. 32 39 33 * Le CAluX est utilisé pour les ''connecteurs'', c'est à dire pour les segments faisant partie de l'interface de la cellule 40 [[Image(nand3.jpg,nolink)]] 34 41 35 * Les VIAs ou contacts : ContDiffN, ContDiffP, ContPoly et Via Metal1/Metal2. 42 * La cellule inv_x1 a une largeur de 3 pitchs. 43 * Le signal d'entrée E est accessible sur 6 pistes de routage. 44 Le signal de sortie S est accessible sur 7 pistes de routage. 36 45 37 * Les Big VIAs, qui correspondent à des matrices de vias. 46 [[Image(tp3.jpg,nolink)]] 38 47 39 * Les transistors : NMOS ou PMOS 48 On propose le placement ci-dessous pour cet opérateur, mais vous pouvez choisir un autre placement si vous le souhaitez : 40 49 41 * Les boîtes d'aboutement qui définissent l'encombrement de la cellule 50 [[Image(place.jpg,nolink)]] 42 51 43 L'éditeur '''graal''' permet d'appeler directement le vérificateur de règles de dessin, 44 en lançant - sous '''graal''' - la commande DRUC. 45 Le vérificateur des règles de dessin '''druc''' peut également être utilisé indépendamment de '''graal'''. 46 L'éditeur '''graal''' permet également de vérifier la connectivité d'une équipotentielle, 47 au moyen de la commande EQUI. 52 Le dessin ci-dessous illustre un routage partiel correspondant à quelques signaux et utilisant des fils de Metal2 , Metal3, ainsi que des via12 et des vias23. 48 53 49 L'outil '''graal''' utilise les variables d'environnement '''GRAAL_TECHNO_NAME'''. 50 et '''RDS_TECHNO_NAME'''. Elles doivent être positionnées aux valeurs suivantes : 51 {{{ 52 > export GRAAL_TECHNO_NAME=/opt/alliance/etc/cmos.graal 53 > export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds 54 }}} 54 [[Image(routage.jpg,nolink)]] 55 55 56 = = 2.2 COUGAR ==56 = 3 Travail à efectuer = 57 57 58 L'outil '''cougar''' est un extracteur, capable d'extraire la ''net-list'' d'un circuit à partir du dessin des masques. L'extracteur '''cougar''' permet de générer deux types de descriptions : 59 * il peut générer une ''net-list'' décrite au niveau transistors (les éléments terminaux sont des transistors) 60 * il peut générer une ''net-list'' décrite au niveau cellules (les éléments terminaux sont des cellules décrites comme des boîtes noires). 58 == 3.1 Saisie du schéma == 61 59 62 '''cougar''' utilise les variables d'environnement '''MBK_IN_PH''' et '''MBK_OUT_LO''' 63 pour spécifier les formats d'entrée et de sortie. 64 Pout représenter une ''net-list'' au niveau transistors, on utilisera de préférence le format '''.spi''', 65 qui respecte la syntaxe imposée par les simulateurs '''spice''' ou '''eldo'''. 66 Pour représenter une ''net-list'' au niveau celules, on utilisera de préférence le format ''.vst'' (VHDL structurel). 60 * Utiliser le langage '''STRATUS''' pour décrire le schéma proposé ci dessus, et générer le fichier ''decodeur.vst'' correspondant à la description structurelle VHDL de cet opérateur. 61 * Valider ce schéma en écrivant quelques stimuli, et en simulant sous '''asimut'''. 67 62 68 Par exemple, pour extraire au niveau transistor, il faut utiliser l'option -t de '''cougar''', et écrire : 69 {{{ 70 > export MBK_IN_PH=ap 71 > export MBK_OUT_LO=spi 72 > cougar -t file1 file2 73 }}} 63 == 3.2 Placement / Routage == 74 64 75 == 2.3 YAGLE == 65 * Saisir sous '''graal''' le dessin du bloc ''decoder'' en instanciant les 5 portes inv_x1 et les 10 portes na3_x1. 66 * Dessiner les fils de routage sous '''graal''', et utiliser la commande ''equi'' pour vérifier la connectivité de chacun des signaux. 67 * Vérifier l'absence de violation des règles de dessin en lançant la commande ''druc'' sous '''graal'''. 68 Pour que cette vérification soit significative, il faut préalablement "mettre à plat" le bloc ''decoder'', en utilisant la commande ''real flat''. 76 69 77 L'outil ''' yagle ''' a été conçu par le laboratoire LIP6, et est actuellement commercialisé par la 78 société '''avertec'''. L'outil d'abstraction fonctionnelle '''yagle''' permet de générer une description comportementale de type ''réseau Booléen'', à partir d'une ''net-list '' de transistors au format '''.spi'''. 70 == 3.3 Validation du routage == 79 71 80 Le fichier au format '''.vhd''' généré par YAGLE respecte la syntaxe VHDL imposée par 81 la chaîne de CAO commerciale '''synopsys'''. L'outil '''VASY''' permet de convertir cette description VHDL comportementale au format '''.vhd''' vers le format '''.vbe''' de la chaîne '''alliance'''. 82 La commande à utiliser est : 83 {{{ 84 > source avt_env.sh 85 > export MBK_IN_LO=spi 86 > yagle -s file1 file2 87 > vasy -a -I vhd file1 file2 88 }}} 72 * Extraire la netlist du bloc ''decoder'' au format .al avec l'outil '''cougar''' mais sans descendre au niveau des transistors : 73 On veut obtenir une ''net-list'' de cellules, et non une ''net-list'' de transistors. 74 * Vérifier que les deux net-lists définies par les fichiers decoder.vst et ''decoder.al'' sont isomorphes en utilisant l'outil '''lvx'''. 75 * Créer un fichier Makefile automatisant la procédure de validation. 89 76 90 La commande avt_env.sh permet de mettre en place l'environnement nécessaire à l'utilisation de '''yagle'''. 91 La documentation pour cet outil se trouvent en : /users/soft/AvtTools2003/doc . 77 = 4 Compte rendu = 92 78 93 == 2.4 PROOF == 94 95 Lorsqu'on veut prouver l'équivalence de deux descriptions comportementales de type réseau Booléen (assignations concurrentes) on peut faire de la cosimulation avec '''asimut''' 96 Cette solution devient vite coûteuse en temps CPU et il vaut mieux faire appel à un outil de preuve formelle qui effectue la preuve ''mathématique'' de l'équivalence des deux réseaux Booléens. 97 98 On lance l'outil '''proof''' par la commande: 99 {{{ 100 >proof file1 file2 101 }}} 102 103 = 3 schéma des cellules à réaliser = 104 105 Le schéma de l'inverseur et du nand2 sont présentés ci dessous : 106 107 [[Image(inv_x1.jpg,nolink)]] 108 109 On utilisera les largeurs suivantes pour les transistors de la cellule inv_x1 : WN =5 / WP = 10 110 111 [[Image(na2.jpg,nolink)]] 112 113 On utisera les largeurs suivantes pour les transistors de la cellule na2_x1 : WN = WP = 10 114 115 = 4 Le gabarit SXLIB = 116 117 * Les cellules de la bibliothèque '''sxlib''' ont toutes une hauteur de 50 lambdas et une largeur multiple de 5 lambda 118 119 * Les alimentations Vdd et Vss sont réalisées en Calu1 ; elles ont une largeur de 6 lambdas 120 et sont placées horizontalement en haut et en bas de la cellule 121 122 * Les transistors P sont placés près du rail Vdd tandis que les transistors N sont 123 placés près du rail Vss 124 125 * Le caisson N doit avoir une hauteur de 24 lambdas 126 127 * Les segments spéciaux CAlu1 forment l'interface de la 128 cellule et jouent le rôle de connecteurs. Ils doivent obligatoirement être 129 placés sur la grille de routage de 5x5 lambdas, et posséder une largeur 130 de La largeur de 2 lambdas 131 132 * Les caissons N et P doivent être polarisés. Il faut donc les relier respectivement 133 à Vdd et à Vss 134 135 = 5 Réalisation de l'inverseur = 136 137 * Décrire le comportement de la cellule inv_x1 dans un fichier au format '''.vbe''' 138 139 * Dessiner sur papier un ''stick-diagram'' pour l'inverseur 140 141 * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit '''SXLIB''' 142 143 * Valider les règles de dessin symbolique en lançant la commande '''DRUC''' sous '''graal''' 144 145 * Utilisez la commande EQUI pour vérifier la connectivité des équipotentielles 146 147 * Extraire la netlist de l'inverseur au format '''.spi''' avec '''cougar''' 148 149 * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement 150 151 = 6 Réalisation d'une porte Nand2 = 152 153 * Décrire le comportement de la cellule na2_x1 dans un fichier au formar '''.vbe''' 154 155 * Dessiner sur papier un ''stick-diagram'' pour cette porte 156 157 * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit '''SXLIB''' 158 159 * Valider les règles de dessin symbolique en lançant la commande DRUC sous '''graal''' 160 161 * Utilisez la commande EQUI pour vérifier la connectivité des équipotentielles 162 163 * Extraire la netlist de l'inverseur au format '''.spi''' avec '''cougar''' 164 165 * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement 166 167 N'oubliez pas que les mans existent... 168 79 Vous rendre un compte rendu d'une page maximum pour ce TP. 80 Vous joindrez vos fichier sans oublier le Makefile.