Changes between Version 23 and Version 24 of ToolsCourseTp6
- Timestamp:
- Oct 9, 2007, 11:48:14 AM (17 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ToolsCourseTp6
v23 v24 5 5 [[PageOutline]] 6 6 7 Introduction : 7 = 1 Objectif = 8 8 9 Le but de ce TP est le dessin sous '''GRAAL''' d'une cellule inverseuse et 10 d'une porte Nand à 2 entrées. 11 12 Les notions de cellules précaractérisées, de gabarit 13 et de hiérarchie de cellules seront introduites. 14 15 = 1-Dessin d'un inverseur et d'une porte Nand2 sous GRAAL = 16 17 == Introduction == 18 Dans les TP précédents nous avons utilisé des cellules d'une bibliothèque. Cette biblioth 19 èque peut être enrichie de nouvelles cellules grâce à l'éditeur '''GRAAL'''. 20 21 '''GRAAL''' est un éditeur de layout symbolique intégrant le vérificateur de règles de dessin '''DRUC'''. 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'''. 22 12 23 13 La première partie de cette séance a pour objectif de dessiner une cellule en tenant compte des règles de dessin 14 symboliques. 24 15 25 16 ftp://asim.lip6.fr/pub/amd2901/symb_rules00-1.pdf 26 17 18 On dessinera tout d'abord la cellule '''inv_x1''', puis on dessinera la cellule '''na2_x1'''. 27 19 28 Il s'agit tout d'abord de la cellule inverseuse '''inv_x1''' sous la forme d'une cellule précaractérisée de la bibliothèque '''sxlib''' en respectant les règles de dessin fournies, puis on dessinera le Nand2 au gabarit '''sxlib''' 20 = 2 Outils utilisés et variables d'environnement = 29 21 22 Le dessin des masques des cellules manipulées par la chaîne de CAO '''Alliance''' utilise 23 la technique de dessin symbolique sur grille fixe, pour permettre la migration technologique. 30 24 25 Tous les fichiers contenant la vue physique (dessin des masques) possèdent l'extension '''.ap''' 26 (comme Alliance Physique). 31 27 32 === 1.1 Environnement technologique === 33 Certains outils utilisent un environnement technologique particulier. Il est désigné 34 la variable d'environnement '''RDS_TECHNO_NAME''' qui doit être positionnée à 28 == 2.1 GRAAL === 35 29 36 opt/alliance/etc/cmos.rds : 30 L'éditeur de layout '''graal''' manipule plusieurs types d'objets différents que l'on peut 31 créer avec le menu '''CREATE''' : 32 * Les instances (importation de cellules pré-existantes) 37 33 38 {{{ 39 > export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds 40 }}} 41 42 === 1.2 GRAAL === 43 44 L'éditeur de layout '''GRAAL''' manipule plusieurs types d'objets différents que l'on peut 45 créer avec le menu '''CREATE''' : 46 * Les instances (importation de cellules physiques) 47 48 * Les boîtes d'aboutement qui définissent les limites de la cellule 34 * Les boîtes d'aboutement qui définissent l'encombrement de la cellule 49 35 50 36 * Les segments : DiffN, DiffP, Poly, Alu1, Alu2 ... 51 37 52 * Le CAluX est utilisé pour désigner une portion possible pour les connecteurs.38 * Le CAluX est utilisé pour les ''connecteurs'', c'est à dire pour les segments faisant partie de l'interface de la cellule 53 39 54 * Les VIAs ou contacts : ContDiffN, ContDiffP, ContPoly et Via Metal1/Metal2.40 * Les VIAs ou contacts : ContDiffN, ContDiffP, ContPoly et Via Metal1/Metal2. 55 41 56 * Les Big VIAs 42 * Les Big VIAs, qui correspondent à des matrices de vias. 57 43 58 44 * Les transistors : NMOS ou PMOS 59 45 60 '''GRAAL''' utilise la variable d'environnement '''GRAAL_TECHNO_NAME'''. Elle doit 61 être positionnée à 62 /opt/alliance/etc/cmos.graal. 46 '''graal''' permet d'appeler directement le vérificateur de règles de dessin '''druc'''. 47 L'outil '''druc''' peut également être utilisé indépendamment de '''graal'''. 48 '''graal''' permet également de vérifier la connectivité d'une équipotentielle, 49 au moyen de la commande '''EQUI'''. 50 51 L'outil '''graal''' utilise les variables d'environnement '''GRAAL_TECHNO_NAME'''. 52 et '''RDS_TECHNO_NAME'''. Elles doivent être positionnée à 63 53 64 54 {{{ 65 55 > export GRAAL_TECHNO_NAME=/opt/alliance/etc/cmos.graal 56 > export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds 57 66 58 }}} 67 59 68 === 1.3 COUGAR === 69 L'outil '''COUGAR''' est capable d'extraire la netlist d'un circuit aux formats .vst ou .al à partir d'une description au format .ap. 60 == 2.2 COUGAR == 70 61 71 Pour extraire au niveau transistor, la commande à utiliser est : 62 L'outil '''cougar''' est un extracteur, capable d'extraire la ''net-list'' d'un circuity à partir d'une description phsique au format .ap'''. L'extracteur '''cougar''' permet de générer deux types de descriptions : 63 * il peut générer une ''net-list'' décrite au niveau transistors (les éléments terminaux sont des transistors) 64 * 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). 65 66 72 67 {{{ 73 68 > cougar -t file1 file2 74 69 }}} 75 70 76 '''COUGAR''' utilise les variables d'environnement '''MBK_IN_PH''' et '''MBK_OUT_LO''' 77 suivant les formats d'entrée et de sortie. Par exemple pour générer une netlist au format 78 al à partir d'une description ap il faut écrire : 71 '''cougar''' utilise les variables d'environnement '''MBK_IN_PH''' et '''MBK_OUT_LO''' 72 pour spécifier les formats d'entrée et de sortie. 73 Pout représenter une ''net-list'' au niveau transistors, on utilisera de préférence le format '''.spi''', 74 qui respecte la syntaxe imposée par les simulateurs '''spice''' ou '''eldo'''. 75 Pour représenter une ''net-list'' au niveau celules, on utilisera de préférence le format ''.vst'' (VHDL structurel). 76 77 Par exemple, pour extraire au niveau transistor, il faut utiliser l'option -t de '''cougar''', et écrire : 79 78 {{{ 80 79 > export MBK_IN_PH=ap 81 82 > export MBK_OUT_LO=al 83 80 > export MBK_OUT_LO=spi 84 81 > cougar -t file1 file2 85 82 }}} 86 83 84 == 2.3 YAGLE == 87 85 86 L'outil ''' yagle ''' a été conçu par le laboratoire LIP6, et est actuellement commercialisé par la 87 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'''. 88 88 89 === 1.4 YAGLE === 90 l 'outil ''' YAGLE ''' est capable d'extraire la description VHDL comportementale d'uncircuit au format '''.vhd''' à partir d'une ''netlist '' au format '''.al''' ''si celle-ci est au niveau transistor.''91 L 'outil '''VASY''' permet de convertir une description VHDL comportementale du format '''.vhd''' au format '''.vbe'''. La commande à utiliser est :89 Le fichier au format '''.vhd''' généré par YAGLE respecte la syntaxe VHDL imposée par 90 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'''. 91 La commande à utiliser est : 92 92 {{{ 93 > export MBK_IN_LO=al 94 95 > export YAGLE_BEH_FORMAT=vbe 93 > source avt_env.sh 94 > export MBK_IN_LO=spi 96 95 > yagle -s file1 file2 97 96 > vasy -a -I vhd file1 file2 98 97 }}} 99 Avant tout vous devez utiliser la commande :100 {{{101 >source avt_env.sh102 }}}103 98 104 Cette commande permet de mettre en place l'environnement nécessaire à l'utilisation de '''YAGLE''' ( le fichier avt_env.sh étant fourni ) 105 L es documentationspour cet outil se trouvent en :'''/users/soft/AvtTools2003/doc '''.99 La commande avt_env.sh permet de mettre en place l'environnement nécessaire à l'utilisation de '''yagle'''. 100 La documentation pour cet outil se trouvent en :'''/users/soft/AvtTools2003/doc '''. 106 101 107 === 1.5 PROOF === 108 Lorsqu'on veut prouver l'équivalence de deux descriptions comportementales de type ''dataflow'' d'un même circuit à n entrées, on peut simuler par '''asimut''' 2n vecteurs pour les deux descriptions et les comparer. 109 Cette solution devient vite coûteuse en temps CPU et il vaut mieux faire appel à un outil de preuve formelle qui effectue la comparaison ''mathématique'' des deux réseaux booléens. 110 '''PROOF''' réalise cette opération entre les description file1.vbe et file2.vbe par la commande 102 == 2.4 PROOF == 103 104 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''' 105 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. 106 107 On lance l'outil '''proof''' par la commande: 111 108 {{{ 112 109 >proof file1 file2 113 110 }}} 114 == 2 Schéma d'un inverseur == 115 Le schéma théorique d'un inverseur est présenté 111 112 = 3 schéma des cellules à réaliser = 113 114 Le schéma de l'inverseur et du nand2 sont présentés ci dessous : 115 116 116 [[Image(inv_x1.jpg,nolink)]] 117 117 118 == 3 Schéma d'un Nand2 ==119 Le schéma théorique d'un buffer et la hiérarchie utilisée sont présentés120 118 [[Image(na2.jpg,nolink)]] 121 119 120 = 4 Le gabarit sxlib = 122 121 123 124 == 4 Le gabarit sxlib ==125 122 * Les cellules de la bibliothèque '''sxlib''' ont toutes une hauteur de 50 lambdas et une largeur multiple de 5 lambda 126 123 … … 135 132 136 133 * Les segments spéciaux CAluX (CAlu1, Calu2, CAlu3...) forment l'interface de la 137 cellule et jouent le rôle de connecteurs "étalés". Ils doivent obligatoirement être138 placés sur une grille de 5x5 lambdas et peuvent se trouver n'importe où à l'intérieur de134 cellule et jouent le rôle de connecteurs. Ils doivent obligatoirement être 135 placés sur la grille de routage de 5x5 lambdas et peuvent se trouver n'importe où à l'intérieur de 139 136 la cellule 140 137 141 * Les segments spéciaux TAlux (TAlu1, TAlu2, ...) servent à désigner les obstacles 142 au routeur Lorsque vous voulez protéger des segments AluX, il faut les recouvrir 143 ou les entourer de TAlux correspondant (même couche). Les TAluX sont placés 144 sur une grille au pas de 5 lambdas 138 * Les segments spéciaux TAlux (TAlu1, TAlu2, ...) servent à indiquer 139 d'éventuels obstacles dans les couches métalliques plus élévées que Alu1. 140 Le routeur n'a pas connaissance des segments internes à la cellule. 141 Si un segment Alux a été utilisé à l'intérieur de la cellule, cet obstacle doit être signalé 142 au routeur qui va utiliser la cellule par un segment TAlux recouvrant le segment Alux. 145 143 146 144 * La largeur minimale de CAlu1 est de 2 lambdas, plus 1 lambda pour l'extension 145 147 146 * Les caissons N et P doivent être polarisés. Il faut donc les relier respectivement 148 147 à Vdd et à Vss 149 148 149 = 5 Réalisation de l'inverseur = 150 151 * Décrire le comportement de la cellule inv_x1 dans un fichier au format '''.vbe''' 150 152 151 == 5 Travail à effectuer == 152 === 5.1 Réalisation d'un inverseur === 153 * Décrire le comportement de la cellule inverseuse dans un fichier .vbe 153 * Dessiner sur papier un ''stick-diagram'' pour l'inverseur 154 154 155 * Dessiner le "stick-diagram" de l'inverseur inv_x1 dont le schéma en transistors 156 est représenté 155 * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit '''SXLIB''' 157 156 158 * Saisir sous '''GRAAL''' le dessin de la cellule en respectant le gabarit spécifié157 * Valider les règles de dessin symbolique en lançant la commande '''DRUC''' sous '''graal''' 159 158 160 * Valider les règles de dessin symbolique en lançant '''DRUC''' sous '''GRAAL'''159 * Extraire la netlist de l'inverseur au format '''.spi''' avec '''cougar''' 161 160 162 * Extraire la netlist de l'inverseur au format .al avec '''COUGAR'''161 * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement 163 162 164 163 = 6 Réalisation d'une porte Nand2 = 165 164 166 === 5.2 Réalisation d'un Nand2 === 167 * Décrire le comportement de la cellule Nand à 2 entrées dans un fichier .vbe 165 * Décrire le comportement de la cellule na2_x1 dans un fichier au formar '''.vbe''' 166 167 * Dessiner sur papier un ''stick-diagram'' pour cette porte 168 168 169 * Dessiner le "stick-diagram" du Nand2 dont le schéma en transistors 170 est représenté 169 * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit '''SXLIB''' 171 170 172 * Saisir sous '''GRAAL''' le dessin de la cellule en respectant le gabarit spécifié171 * Valider les règles de dessin symbolique en lançant la commande '''DRUC''' sous '''graal''' 173 172 174 * Valider les règles de dessin symbolique en lançant '''DRUC''' sous '''GRAAL'''173 * Extraire la netlist de l'inverseur au format '''.spi''' avec '''cougar''' 175 174 176 * Extraire la netlist de la porte nand2 au format .al avec '''COUGAR'''175 * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement 177 176 178 179 180 181 177 N'oubliez pas que les mans existent 182 178