| 1 | {{{ |
| 2 | #!html |
| 3 | <h1> TP3 : Dessin de cellule </h1> |
| 4 | }}} |
| 5 | [[PageOutline]] |
| 6 | |
| 7 | == Introduction == |
| 8 | |
| 9 | Le but de cet exercice est le dessin sous '''graal''' d'une Nand à 2 entrées. |
| 10 | Les notions de cellules précaractérisées et de de gabarit seront introduites. |
| 11 | |
| 12 | Dans les TP précédents nous avons utilisé des cellules d'une bibliothèque. |
| 13 | Cette bibliothèque peut être enrichie de nouvelles cellules grâce à l'éditeur '''graal'''. |
| 14 | |
| 15 | '''graal''' est un éditeur de layout symbolique intégrant le vérificateur de règles de dessin '''druc'''. |
| 16 | |
| 17 | Cet exercice a pour objectif de dessiner une cellule en tenant compte des [attachment:symb_rules00-1.pdf règles de dessin fournies]. |
| 18 | |
| 19 | Vous devez travailler dans l'environnement Allaince. Vérifier que cette variable est bien positionnée : |
| 20 | |
| 21 | {{{ |
| 22 | > echo $RDS_TECHNO_NAME |
| 23 | }}} |
| 24 | |
| 25 | Si ce n'est pas le cas, positionnez la : |
| 26 | |
| 27 | {{{ |
| 28 | > export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds |
| 29 | }}} |
| 30 | |
| 31 | == Outils utilisés == |
| 32 | |
| 33 | === Graal === |
| 34 | |
| 35 | L'éditeur de layout '''graal''' manipule plusieurs types d'objets différents que l'on peut créer avec le menu '''create''' : |
| 36 | * les instances (importation de cellules physiques), |
| 37 | * les boîtes d'aboutement qui définissent les limites de la cellule, |
| 38 | * les segments : DiffN, DiffP, Poly, Alu1, Alu2 ... |
| 39 | * le CAluX est utilisé pour désigner une portion possible pour les connecteurs, |
| 40 | * les VIAs ou contacts :ContDiffN, ContDiffP, !ContPoly et Via Metal1/Metal2, |
| 41 | * les Big VIAs, |
| 42 | * les transistors : NMOS ou PMOS. |
| 43 | |
| 44 | '''graal''' utilise la variable d'environnement '''GRAAL_TECHNO_NAME'''. Vérifiez qu'elle est bien positionnée à ''/users/outil/alliance/Linux.SLSoC5x/etc/cmos.graal'' : |
| 45 | |
| 46 | === Cougar === |
| 47 | |
| 48 | L'outil '''cougar''' est capable d'extraire la netlist d'un circuit aux formats '''.vst''' ou '''.al''' à partir d'une description au format '''.ap'''. |
| 49 | |
| 50 | Pour extraire au niveau transistor, la commande à utiliser est : |
| 51 | {{{ |
| 52 | > cougar -t file1 file2 |
| 53 | }}} |
| 54 | |
| 55 | '''cougar''' utilise les variables d'environnement '''MBK_IN_PH''' et '''MBK_OUT_LO''' suivant les formats d'entrée et de sortie. |
| 56 | Par exemple pour générer une netlist au format '''.al''' à partir d'une description '''.ap''' il faut écrire : |
| 57 | {{{ |
| 58 | > export MBK_IN_PH=ap |
| 59 | > export MBK_OUT_LO=al |
| 60 | > cougar -t file1 file2 |
| 61 | }}} |
| 62 | |
| 63 | === Yagle et Proof === |
| 64 | |
| 65 | L'outil '''yagle''' est capable d'extraire la description VHDL comportementale d'uncircuit au format '''.vbe''' à partir d'une ''netlist '' au format '''.al''' ''si celle-ci est au niveau transistor''. |
| 66 | |
| 67 | {{{ |
| 68 | > export MBK_IN_LO=al |
| 69 | > ~encadr/yagle -s file1 file2 |
| 70 | }}} |
| 71 | |
| 72 | === Proof === |
| 73 | |
| 74 | 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. |
| 75 | 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. |
| 76 | '''proof''' réalise cette opération entre les description file1.vbe et file2.vbe par la commande : |
| 77 | {{{ |
| 78 | > proof file1 file2 |
| 79 | }}} |
| 80 | |
| 81 | == Le gabarit sxlib == |
| 82 | |
| 83 | * Les cellules de la bibliothèque '''sxlib''' ont toutes une hauteur de 50 lambdas et une largeur multiple de 5 lambda. |
| 84 | * Les alimentations Vdd et Vss sont réalisées en Calu1 (centrés à 3 et 47 lambdas en Y); |
| 85 | elles ont une largeur de 6 lambdas et sont placées horizontalement en haut et en bas de la cellule. |
| 86 | * Les transistors P sont placés près du rail Vdd tandis que les transistors N sont placés près du rail Vss. |
| 87 | * Le caisson N doit avoir une hauteur de 24 lambdas (centré à 39 lambdas en Y): |
| 88 | * Les segments spéciaux CAluX (CAlu1, Calu2, CAlu3...) forment l'interface de la cellule et jouent le rôle de connecteurs "étalés". |
| 89 | 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. |
| 90 | * La largeur minimale de CAlu1 est de 2 lambdas, plus 1 lambda pour l'extension. |
| 91 | |
| 92 | Le schéma de la figure suivante présente un résumé de ces contraintes : |
| 93 | |
| 94 | [[Image(gabarit_sxlib.jpg,nolink)]] |
| 95 | |
| 96 | == 1.4 Travail à effectuer == |
| 97 | |
| 98 | Le schéma théorique du Nand2 est présenté dans la figure suivante : |
| 99 | |
| 100 | [[Image(na2.jpg,nolink)]] |
| 101 | |
| 102 | Réaliser les étapes suivantes : |
| 103 | |
| 104 | * Décrire le comportement de la cellule dans un fichier au format '''.vbe'''. |
| 105 | * Dessiner sur papier un stick-diagram. |
| 106 | * Saisir sous '''graal''' le dessin de la cellule en respectant le gabarit SXLIB. |
| 107 | * On utilisera les largeurs suivantes pour les transistors : WN = WP = 10. |
| 108 | * Valider les règles de dessin symbolique en lançant la commande '''DRUC''' sous graal. N'hésitez pas à lancer '''DRUC''' au fur et à mesure de façon à détecter les erreurs rapidement !! |
| 109 | * Utilisez la commande '''EQUI''' pour vérifier la connectivité des équipotentielles. |
| 110 | * Extraire la netlist de l'inverseur au format '''.al''' avec '''cougar'''. |
| 111 | * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement. |
| 112 | * Créer un '''Makefile''' pour automatiser les différentes étapes. |
| 113 | |
| 114 | N'oubliez pas que les mans existent ... |
| 115 | |
| 116 | = Compte rendu = |
| 117 | |
| 118 | Vous rédigerez un petit compte-rendu pour ce TP dans lequel vous expliquerez : |
| 119 | * les choix effectués pour la création de la cellule Nand ainsi que la démarche de validation, |
| 120 | * Le Makefile de vérification de votre cellule |
| 121 | |
| 122 | Vous joindrez vos fichiers source sans oublier les fichiers Makefile. |