Changes between Version 29 and Version 30 of ToolsCourseTp6


Ignore:
Timestamp:
Sep 20, 2008, 7:03:50 PM (16 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp6

    v29 v30  
    11{{{
    22#!html
    3 <h1> TP6 : Dessin de cellules précaractérisées</h1>
     3<h1> TP6 : Placement/routage </h1>
    44}}}
    55[[PageOutline]]
    66
    77= 1 Objectif =
     8 
     9Nous avons vu dans le TP5 comment dessiner une cellule précaractérisée respectant le gabarit de le bibliothèque '''SXLIB'''.
     10Le 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'''.
    811
    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'''.
     12On 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.
    1213
    13 On dessinera tout d'abord la cellule  '''inv_x1''', puis on dessinera la cellule '''na2_x1'''.
     14= 2 Spécification fonctionnelle =
     15 
     16On souhaite réaliser le décodeur 3 vers 4 tel que décrit ci-dessous.
    1417
    15 = 2 Outils CAO utilisés =
     18[[Image(compteur.jpg,nolink)]]
    1619
    17 Le dessin des masques des cellules manipulées par la chaîne de CAO '''Alliance''' utilise
    18 la technique de dessin symbolique sur grille fixe, pour permettre la migration technologique.
     20La sortie Zi prend la valeur 1 quand le nombre de bits d'entrée ayant la valeur 1 est égal à i.
     21Les 3 autres sorties prennent la valeur 0.
    1922
    20 ftp://asim.lip6.fr/pub/amd2901/symb_rules00-1.pdf
     23Les é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
    2128
    22 Tous les fichiers contenant la vue physique (dessin des masques) possèdent l'extension '''.ap'''
    23 (comme Alliance Physique).
     29De ces équations , on déduit le schéma en portes logiques inverseuses :
    2430
    25 == 2.1 GRAAL ==
     31[[Image(schema.jpg,nolink)]]
    2632
    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)
     33Le bloc à réaliser contient donc 10 portes NAND3 et 5 inverseurs.
     34Regardons plus précisément les caractéristiques de chaque cellule :
    3035
    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.
    3239
    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)]]
    3441
    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.
    3645
    37   * Les Big VIAs, qui  correspondent à des matrices de vias.
     46[[Image(tp3.jpg,nolink)]]
    3847
    39   * Les transistors : NMOS ou PMOS
     48On propose le placement ci-dessous pour cet opérateur, mais vous pouvez choisir un autre placement si vous le souhaitez :
    4049
    41   * Les boîtes d'aboutement qui définissent l'encombrement de la cellule
     50[[Image(place.jpg,nolink)]]
    4251
    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.
     52Le dessin ci-dessous illustre un routage partiel correspondant à quelques signaux et utilisant des fils de Metal2 , Metal3, ainsi que  des via12 et des vias23.
    4853
    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)]]
    5555
    56 == 2.2 COUGAR ==
     56= 3 Travail à efectuer =
    5757
    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 ==
    6159
    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'''.
    6762
    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 ==
    7464
    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''.
    7669
    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 ==
    7971
    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.
    8976
    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 =
    9278
    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 
     79Vous rendre un compte rendu d'une page maximum pour ce TP.
     80Vous joindrez vos fichier sans oublier le Makefile.