| | 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. |