| 1 | {{{ |
| 2 | #!html |
| 3 | <h1> TP3 : Vue Physique</h1> |
| 4 | }}} |
| 5 | [[PageOutline]] |
| 6 | |
| 7 | = 1 Dessin de cellule = |
| 8 | |
| 9 | == 1.1 Introduction == |
| 10 | |
| 11 | Le but de cet exercice est le dessin sous '''GRAAL''' d'une Nand à 2 entrées. |
| 12 | Les notions de cellules précaractérisées et de de gabarit seront introduites. |
| 13 | |
| 14 | Dans les TP précédents nous avons utilisé des cellules d'une bibliothèque. |
| 15 | Cette bibliothèque peut être enrichie de nouvelles cellules grâce à l'éditeur '''GRAAL'''. |
| 16 | |
| 17 | '''GRAAL''' est un éditeur de layout symbolique intégrant le vérificateur de règles de dessin '''DRUC'''. |
| 18 | |
| 19 | Cet exercice a pour objectif de dessiner une cellule en tenant compte des [attachment:symb_rules00-1.pdf règles de dessin fournies]. |
| 20 | |
| 21 | Remarque : certains outils utilisent un environnement technologique particulier. |
| 22 | Il est désigné la variable d'environnement '''RDS_TECHNO_NAME''' qui doit être positionnée à ''opt/alliance/etc/cmos.rds'' : |
| 23 | |
| 24 | {{{ |
| 25 | > export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds |
| 26 | }}} |
| 27 | |
| 28 | == 1.2 Outils utilisés == |
| 29 | |
| 30 | === GRAAL === |
| 31 | |
| 32 | L'éditeur de layout '''GRAAL''' manipule plusieurs types d'objets différents que l'on peut créer avec le menu '''CREATE''' : |
| 33 | * les instances (importation de cellules physiques), |
| 34 | * les boîtes d'aboutement qui définissent les limites de la cellule, |
| 35 | * les segments : DiffN, DiffP, Poly, Alu1, Alu2 ... |
| 36 | * le CAluX est utilisé pour désigner une portion possible pour les connecteurs, |
| 37 | * les VIAs ou contacts :ContDiffN, ContDiffP, !ContPoly et Via Metal1/Metal2, |
| 38 | * les Big VIAs, |
| 39 | * les transistors : NMOS ou PMOS. |
| 40 | |
| 41 | '''GRAAL''' utilise la variable d'environnement '''GRAAL_TECHNO_NAME'''. |
| 42 | Elle doit être positionnée à ''/opt/alliance/etc/cmos.graal'' : |
| 43 | |
| 44 | {{{ |
| 45 | > export GRAAL_TECHNO_NAME=/opt/alliance/etc/cmos.graal |
| 46 | }}} |
| 47 | |
| 48 | === COUGAR === |
| 49 | |
| 50 | L'outil '''COUGAR''' est capable d'extraire la netlist d'un circuit aux formats '''.vst''' ou '''.al''' à partir d'une description au format '''.ap'''. |
| 51 | |
| 52 | Pour extraire au niveau transistor, la commande à utiliser est : |
| 53 | {{{ |
| 54 | > cougar -t file1 file2 |
| 55 | }}} |
| 56 | |
| 57 | '''COUGAR''' utilise les variables d'environnement '''MBK_IN_PH''' et '''MBK_OUT_LO''' suivant les formats d'entrée et de sortie. |
| 58 | Par exemple pour générer une netlist au format '''.al''' à partir d'une description '''.ap''' il faut écrire : |
| 59 | {{{ |
| 60 | > export MBK_IN_PH=ap |
| 61 | > export MBK_OUT_LO=al |
| 62 | > cougar -t file1 file2 |
| 63 | }}} |
| 64 | |
| 65 | === YAGLE === |
| 66 | |
| 67 | 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''. |
| 68 | |
| 69 | L'outil '''VASY''' permet de convertir une description VHDL comportementale du format '''.vhd''' au format '''.vbe'''. |
| 70 | La commande à utiliser est : |
| 71 | {{{ |
| 72 | > export MBK_IN_LO=al |
| 73 | > export YAGLE_BEH_FORMAT=vbe |
| 74 | > yagle -s file1 file2 |
| 75 | > vasy -a -I vhd file1 file2 |
| 76 | }}} |
| 77 | |
| 78 | Avant tout vous devez utiliser la commande : |
| 79 | {{{ |
| 80 | > source avt_env.sh |
| 81 | }}} |
| 82 | |
| 83 | avec le fichier [attachment:avt_env.sh avt_env.sh]. |
| 84 | Cette commande permet de mettre en place l'environnement nécessaire à l'utilisation de '''YAGLE'''. |
| 85 | |
| 86 | Les documentations pour cet outil se trouvent en :'''/users/soft/AvtTools2003/doc '''. |
| 87 | |
| 88 | === PROOF === |
| 89 | |
| 90 | 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''' des vecteurs pour les deux descriptions et les comparer. |
| 91 | 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. |
| 92 | '''PROOF''' réalise cette opération entre les description file1.vbe et file2.vbe par la commande : |
| 93 | {{{ |
| 94 | > proof file1 file2 |
| 95 | }}} |
| 96 | |
| 97 | == 1.3 Le gabarit sxlib == |
| 98 | |
| 99 | * Les cellules de la bibliothèque '''sxlib''' ont toutes une hauteur de 50 lambdas et une largeur multiple de 5 lambda. |
| 100 | * Les alimentations Vdd et Vss sont réalisées en Calu1 ; |
| 101 | elles ont une largeur de 6 lambdas et sont placées horizontalement en haut et en bas de la cellule. |
| 102 | * Les transistors P sont placés près du rail Vdd tandis que les transistors N sont placés près du rail Vss. |
| 103 | * Le caisson N doit avoir une hauteur de 24 lambdas : |
| 104 | * Les segments spéciaux CAluX (CAlu1, Calu2, CAlu3...) forment l'interface de la cellule et jouent le rôle de connecteurs "étalés". |
| 105 | Ils doivent obligatoirement être placés sur une grille de 5x5 lambdas et peuvent se trouver n'importe où à l'intérieur de la cellule. |
| 106 | * Les segments spéciaux TAlux (TAlu1, TAlu2, ...) servent à désigner les obstacles au routeur Lorsque vous voulez protéger des segments AluX, |
| 107 | il faut les recouvrir ou les entourer de TAlux correspondant (même couche). |
| 108 | Les TAluX sont placés sur une grille au pas de 5 lambdas. |
| 109 | * La largeur minimale de CAlu1 est de 2 lambdas, plus 1 lambda pour l'extension. |
| 110 | * Les caissons N et P doivent être polarisés. |
| 111 | Il faut donc les relier respectivement à Vdd et à Vss. |
| 112 | |
| 113 | Le schéma de la figure suivante présente un résumé de ces contraintes : |
| 114 | |
| 115 | [[Image(gabarit_sxlib.jpg,nolink)]] |
| 116 | |
| 117 | == 1.4 Travail à effectuer == |
| 118 | |
| 119 | Le schéma théorique du Nand2 est présenté dans la figure suivante : |
| 120 | |
| 121 | [[Image(na2.jpg,nolink)]] |
| 122 | |
| 123 | Réaliser les étapes suivantes : |
| 124 | |
| 125 | * Décrire le comportement de la cellule dans un fichier au format '''.vbe'''. |
| 126 | * Dessiner sur papier un stick-diagram. |
| 127 | * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit SXLIB. |
| 128 | * On utilisera les largeurs suivantes pour les transistors : WN = WP = 10. |
| 129 | * Valider les règles de dessin symbolique en lançant la commande '''DRUC''' sous graal. |
| 130 | * Utilisez la commande '''EQUI''' pour vérifier la connectivité des équipotentielles. |
| 131 | * Extraire la netlist de l'inverseur au format '''.al''' avec '''cougar'''. |
| 132 | * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement. |
| 133 | * Créer un '''Makefile''' pour automatiser les différentes étapes. |
| 134 | |
| 135 | N'oubliez pas que les mans existent ... |
| 136 | |
| 137 | = 2 Routage manuel = |
| 138 | |
| 139 | TODO |
| 140 | |
| 141 | = 3 Placement de l'addaccu = |
| 142 | |
| 143 | TODO |
| 144 | |
| 145 | = 4 Compte rendu = |
| 146 | |
| 147 | Vous rédigerez un compte-rendu de deux pages maximum pour ce TP dans lequel vous expliquerez les choix effectués pour la création de la cellule Nand ainsi que la démarche de validation. |
| 148 | Vous expliquerez également la façon dont vous avez routé l'additionneur. |
| 149 | Vous expliquerez enfin la façon dont vous avez placé les colonnes de votre addaccu. |
| 150 | |
| 151 | Vous joindrez vos fichiers source sans oublier les fichiers Makefile. |