Changes between Version 23 and Version 24 of ToolsCourseTp6


Ignore:
Timestamp:
Oct 9, 2007, 11:48:14 AM (17 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp6

    v23 v24  
    55[[PageOutline]]
    66
    7 Introduction :
     7= 1 Objectif =
    88
    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'''.
     9Le but de ce TP est de vous apprendre à utiliser l'éditeur graphique  '''graal''', et différents
     10outils de vérification, pour réaliser le dessin des masques de deux cellules précaractérisées respectant
     11le gabarit de la bibliothèque '''SXLIB'''.
    2212
    2313La première partie de cette séance a pour objectif de dessiner une cellule en tenant compte des règles de dessin
     14symboliques.
    2415
    2516ftp://asim.lip6.fr/pub/amd2901/symb_rules00-1.pdf
    2617
     18On dessinera tout d'abord la cellule  '''inv_x1''', puis on dessinera la cellule '''na2_x1'''.
    2719
    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 =
    2921
     22Le dessin des masques des cellules manipulées par la chaîne de CAO '''Alliance''' utilise
     23la technique de dessin symbolique sur grille fixe, pour permettre la migration technologique.
    3024
     25Tous les fichiers contenant la vue physique (dessin des masques) possèdent l'extension '''.ap'''
     26(comme Alliance Physique).
    3127
    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 ===
    3529
    36 opt/alliance/etc/cmos.rds :
     30L'éditeur de layout '''graal''' manipule plusieurs types d'objets différents que l'on peut
     31créer avec le menu '''CREATE''' :
     32  * Les instances (importation de cellules pré-existantes)
    3733
    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
    4935
    5036  * Les segments : DiffN, DiffP, Poly, Alu1, Alu2 ...
    5137
    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
    5339
    54   * Les VIAs ou contacts :ContDiffN, ContDiffP, ContPoly et Via Metal1/Metal2.
     40  * Les VIAs ou contacts : ContDiffN, ContDiffP, ContPoly et Via Metal1/Metal2.
    5541
    56   * Les Big VIAs
     42  * Les Big VIAs, qui  correspondent à des matrices de vias.
    5743
    5844  * Les transistors : NMOS ou PMOS
    5945
    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'''.
     47L'outil '''druc''' peut également être utilisé indépendamment de '''graal'''.
     48'''graal''' permet également de vérifier la connectivité d'une équipotentielle,
     49au moyen de la commande '''EQUI'''.
     50
     51L'outil '''graal''' utilise les variables d'environnement '''GRAAL_TECHNO_NAME'''.
     52et '''RDS_TECHNO_NAME'''. Elles doivent être positionnée à
    6353
    6454{{{
    6555> export GRAAL_TECHNO_NAME=/opt/alliance/etc/cmos.graal
     56> export RDS_TECHNO_NAME=/opt/alliance/etc/cmos.rds
     57
    6658}}}
    6759
    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 ==
    7061
    71 Pour extraire au niveau transistor, la commande à utiliser est :
     62L'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
    7267{{{
    7368> cougar -t file1 file2
    7469}}}
    7570
    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'''
     72pour spécifier les formats d'entrée et de sortie.
     73Pout représenter une ''net-list'' au niveau transistors, on utilisera de préférence le format '''.spi''',
     74qui respecte la syntaxe imposée par les simulateurs '''spice''' ou '''eldo'''.
     75Pour représenter une ''net-list'' au niveau celules, on utilisera de préférence le format ''.vst'' (VHDL structurel).
     76
     77Par exemple, pour extraire au niveau transistor, il faut utiliser l'option -t de '''cougar''', et écrire :
    7978{{{
    8079> export MBK_IN_PH=ap
    81 
    82 > export MBK_OUT_LO=al
    83 
     80> export MBK_OUT_LO=spi
    8481> cougar -t file1 file2
    8582}}}
    8683
     84== 2.3 YAGLE ==
    8785
     86L'outil ''' yagle ''' a été conçu par le laboratoire LIP6, et est actuellement commercialisé par la
     87socié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'''.
    8888
    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 :
     89Le fichier au format '''.vhd''' généré par YAGLE respecte la syntaxe VHDL imposée par
     90la 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'''.
     91La commande à utiliser est :
    9292{{{
    93 > export MBK_IN_LO=al
    94 
    95 > export YAGLE_BEH_FORMAT=vbe
     93> source avt_env.sh
     94> export MBK_IN_LO=spi
    9695> yagle -s file1 file2
    9796> vasy -a -I vhd file1 file2
    9897}}}
    99  Avant tout vous devez utiliser la commande :
    100 {{{
    101 >source avt_env.sh
    102 }}}
    10398
    104 Cette commande permet de mettre en place l'environnement nécessaire à l'utilisation de '''YAGLE''' ( le fichier avt_env.sh étant fourni )
    105 Les documentations pour cet outil se trouvent en :'''/users/soft/AvtTools2003/doc '''.
     99La commande avt_env.sh permet de mettre en place l'environnement nécessaire à l'utilisation de '''yagle'''.
     100La documentation pour cet outil se trouvent en :'''/users/soft/AvtTools2003/doc '''.
    106101
    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
     104Lorsqu'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'''
     105Cette 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
     107On lance l'outil '''proof''' par la commande:
    111108{{{
    112109>proof file1 file2
    113110}}}
    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
     114Le schéma de l'inverseur  et du nand2 sont  présentés ci dessous :
     115 
    116116[[Image(inv_x1.jpg,nolink)]]
    117117
    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és
    120118[[Image(na2.jpg,nolink)]]
    121119
     120= 4 Le gabarit sxlib =
    122121
    123 
    124 == 4 Le gabarit sxlib ==
    125122  * Les cellules de la bibliothèque '''sxlib''' ont toutes une hauteur de 50 lambdas et une largeur multiple de 5 lambda
    126123
     
    135132
    136133  * 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 être
    138     placés sur une grille de 5x5 lambdas et peuvent se trouver n'importe où à l'intérieur de
     134    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
    139136    la cellule
    140137
    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.
    145143
    146144  * La largeur minimale de CAlu1 est de 2 lambdas, plus 1 lambda pour l'extension
     145
    147146  * Les caissons N et P doivent être polarisés. Il faut donc les relier respectivement 
    148147    à Vdd et à Vss
    149148
     149= 5 Réalisation de l'inverseur =
     150   
     151   * Décrire le comportement de la cellule inv_x1 dans un fichier au format '''.vbe'''
    150152
    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
    154154
    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'''
    157156
    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'''
    159158
    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'''
    161160
    162   *  Extraire la netlist de l'inverseur au format .al avec '''COUGAR'''
     161   * Utiliser les outils '''yagle''' et '''proof''' pour vérifier le comportement
    163162
    164  
     163= 6 Réalisation d'une porte Nand2 =
    165164
    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
    168168
    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'''
    171170
    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'''
    173172
    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'''
    175174
    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
    177176
    178 
    179 
    180  
    181177N'oubliez pas que les mans existent
    182178