Changes between Version 48 and Version 49 of ToolsCourseTp7


Ignore:
Timestamp:
Oct 4, 2007, 4:44:54 PM (17 years ago)
Author:
anne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp7

    v48 v49  
    1 {{{
    2 #!html
    3 <h1> TP7 : Placement et routage du circuit AMD2901</h1>
    4 }}}
    5 [[PageOutline]]
    6 = 1 Outils utilisés =
    7 Vous allez utiliser les outils de placement flot Coriolis et le routeur d'Alliance, ainsi
    8 que tous les outils de vérification vus dans le TP précédent.
    9 Vous utiliserez aussi '''lvx''', le comparateur de netlists.
    10 
    11 = 2 Environnement technologique =
    12 Outre l'environnement technologique de la première partie du TP, vous devez positionner
    13 :
    14 {{{
    15 > export VH_MAXERR=10
    16 > export MBK_WORK_LIB=.
    17 > export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib
    18 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/dp_sxlib
    19 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/pxlib
    20 > export MBK_CATA_LIB=$MBK_CATA_LIB :.
    21 > export MBK_CATAL_NAME=CATAL
    22 > export MBK_IN_LO=vst
    23 > export MBK_OUT_LO=vst
    24 > export MBK_IN_PH=ap
    25 > export MBK_OUT_PH=ap
    26 > export CRL_OUT_LO=vst
    27 > export CRL_OUT_PH=ap
    28 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/stratus
    29 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH
    30 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages :$PYTHONPATH
    31 }}}
    32 NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être
    33 utile de les vérifier.
    34 = 3 Précautions quant au nommage des fichiers =
    35 D'une manière générale, les fichiers décrivant une netlist logique doivent porter le
    36 même nom que le fichier correspondant décrivant la vue physique.
    37 
    38 C'est à dire que le fichier amd2901_dpt.vst (vue logique) doit correspondre au fichier amd2901_dpt.ap
    39 (vue physique). Il en va de même pour le fichier amd2901_core.
    40 
    41 
    42 = 4 Travail sur le chemin de données : Préplacement des opérateurs =
    43 Le TP précédent vous a permis de décrire la netlist hiérarchique du chemin de donn
    44 ées. Vous allez maintenant placer les colonnes du chemin de données de manière à
    45 profiter de la régularité du chemin de données.
    46 Pour réaliser votre placement des opérateurs, vous disposez des fonctions de ''''STRATUS''''
    47 suivantes :
    48  *   Place()
    49  *  !PlaceRight(), !PlaceTop(), !PlaceLeft(), !PlaceBottom()
    50  *  !SetRefIns()
    51  *  !DefAb(), !ResizeAb()
    52 
    53 Toutes ces fonctions doivent être utilisées dans la méthode Layout.
    54 Reprenons l'exemple du TP précédent, on donne le code suivant pour le fichier circuit.py :
    55 {{{
    56 #!/usr/bin/env python
    57 from stratus import *
    58 # definition de la cellule
    59 class circuit ( Model ):
    60 ...
    61   def Layout ( self ):
    62     Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) )
    63     PlaceRight ( self.instance_or2_4bits, NOSYM )
    64     PlaceRight ( self.instance_add2_4bits, NOSYM )
    65 }}}
    66 Ensuite pour le fichier test_circuit.py, il faut rajouter l'appel à la méthode Layout :
    67 {{{
    68 #!/usr/bin/env python
    69 from stratus import *
    70 from circuit import circuit
    71 my_circuit = circuit ( "mon_circuit" ) # creation du circuit
    72 my_circuit.Interface() # creation de l’interface
    73 my_circuit.Netlist() # creation de la netlist
    74 my_circuit.Layout() # creation du layout
    75 my_circuit.View() # pour afficher le layout
    76 my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap
    77 }}}
    78 
    79 Reprenez le fichier amd2901_dpt.py. Pour l'instant, ce fichier ne comporte qu'une
    80 description de la netlist. Cela vous a permis de générer une description structurelle
    81 sous la forme d'un fichier .vst. Il s'agit maintenant de placer explicitement les colonnes.
    82 '''Le placement des colonnes du chemin de données ne doit pas être
    83 fait au hasard. La faisabilité et la qualité du routage en dépendent '''
    84 
    85 Aidez-vous du manuel de STRATUS :
    86 
    87 https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/stratus/index.html
    88 
    89 
    90 
    91 Utilisez STRATUS pour générer le tout :
    92 {{{
    93 > ./execute_amd2901_dpt.py
    94 }}}
    95 
    96 [[Image(preplacement.jpg,nolink)]]
    97 
    98   = 5 Travail sur le coeur : Préplacement des structures régulières =
    99 à partir du fichier de description structurelle  [attachment:amd2901_core.py coeur du circuit] que vous avez enrichi
    100 de la description des "netlists" de la partie contrôle et de la partie chemin de données, effectuez les étapes suivantes dans la méthode
    101 Layout :
    102 
    103   * Placer le chemin de données : fonction Place ()
    104  
    105   * Agrandir la boite d'aboutement du coeur : fonction !ResizeAb ()
    106 cette étape est utile pour réserver la place pour la partie contrôle
    107 
    108   * Placer les rails de rappels d'alimentation dans le coeur :
    109     fonctions !AlimVerticalRail () et !AlimHorizontalRail ()
    110 
    111   * Placer les connecteurs du coeur : fonction !AlimConnectors ()
    112 
    113 
    114 '''ATTENTION ''': La logique "irrégulière" constituant la partie contrôle n'a pas besoin
    115  d'être placée explicitement. Cela sera fait automatiquement par la suite !
    116 
    117 '''Vérifiez le résultat'''
    118 {{{
    119 > ./execute_amd2901_core.py
    120 }}}
    121 
    122 
    123  = 6 Travail sur le cicuit complet =
    124 
    125   Prenez le fichier [attachment:amd2901_chip.py circuit complet avec les plots] et complétez la méthode Layout
    126 comme indiqué ci-dessous.
    127 
    128 == 6.1 Placement de la couronne de plots et du coeur ==
    129 
    130  Dans le fichier amd2901_chip.py fourni, les plots sont instanciés dans la méthode
    131 Netlist :
    132 {{{
    133 def Netlist ( self ) :
    134 ...
    135   Inst ( "pck_px", "p_ck"
    136         , map = { ’pad’ : self.ck
    137                  , ’ck’ : cki
    138                  , ’vddi’ : self.vdd
    139                  , ’vssi’ : self.vss
    140                  , ’vdde’ : self.vdde
    141                  , ’vsse’ : self.vsse
    142                  }
    143 
    144        )
    145 }}}
    146  Il vous faut donc, dans la méthode Layout :
    147 
    148 
    149   * Définir la taille de la boîte d'aboutement globale du circuit de façon à ce que
    150 les plots puissent être placés à la périphérie : fonction !DefAb () (Commencer par
    151 définir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la
    152 diminuer)
    153 
    154   * Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
    155   !PlaceCentric ()
    156 
    157   * Définir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se
    158  fait à l'aide des 4 fonctions : !PadNorth (), !PadSouth (), !PadEast () et !PadWest ().
    159 
    160   * Vérifiez le résultat :
    161 {{{
    162 > ./execute_amd2901_chip.py
    163 }}}
    164 
    165 == 6.2 Routage des alimentations ==
    166 Vous devez utiliser la fonction !PowerRing () pour créer la grille d'alimentation.
    167 Vérifiez le résultat :
    168 {{{
    169 > ./execute_amd2901_chip.py
    170 }}}
    171 
    172 
    173  == 6.3 Placement de la logique irrégulière ==
    174 C'est le placeur '''Mistral''' qui se charge de placer les cellules de la partie de contrôle.
    175 Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
    176 utilisant les zones "vides". Pour appeler le placeur '''Mistral''', vous devez faire appel à la
    177 fonction ''!PlaceGlue ()''
    178 
    179 [[Image(zoomPlaceGlue.jpg,nolink)]]
    180 
    181 Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
    182 que les plots soient placés. L'outil de placement du flot CORIOLIS place les cellules
    183 en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà
    184 placées.
    185 [[Image(placement.jpg,nolink)]]
    186 Vérifiez le résultat :
    187 {{{
    188 > ./execute_amd2901_chip.py
    189 }}}
    190 
    191 
    192 [[Image(rappel.jpg,nolink)]]
    193 
    194 Le placement automatique se termine par l'appel à la fonction !FillCell () qui effectue
    195 le placement automatique de cellules de bourrage.
    196 [[Image(zoomFillCell.jpg,nolink)]]
    197 
    198 Vérifiez le résultat :
    199 
    200 {{{
    201 > ./execute_amd2901_chip.py
    202 }}}
    203 
    204  == 6.4 Routage des signaux d'horloge ==
    205 
    206 Vous devez utiliser la fonction !RouteCk () qui route le signal d'horloge.
    207 Vérifiez le résultat :
    208 {{{
    209 > ./execute_amd2901_chip.py
    210 }}}
    211 
    212 [[Image(zoomCk.jpg,nolink)]]
    213 
    214  == 6.5 Routage des signaux logiques ==
    215 Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux
    216 d'alimentation en utilisant NERO de la manière suivante :
    217 {{{
    218 > nero -V -p amd2901_chip amd2901_chip amd2901_chip_r
    219 }}}
    220 
    221 L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le
    222 troisième argument est la netlist du chip, le quatrième est le fichier résultat.
    223 
    224 
    225 NOTA BENE : La variable '''MBK_CATA_LIB''' ne doit contenir qu'une seule fois les
    226 chemins d'accès aux bibliothèques.
    227 
    228 == 6.6 Validation du chip ==
    229 
    230  
    231  *  On validera le travail de '''NERO''' avec les outils '''DRUC''', '''COUGAR''' et '''LVX'''.
    232 {{{
    233 > druc amd2901_chip_r
    234 > export MBK_OUT_LO=al
    235 > cougar -f amd2901_chip_r
    236 > lvx vst al amd2901_chip amd2901_chip_r -f
    237 }}}
    238 
    239   *  Simulez à nouveau la netlist extraite avec '''ASIMUT'''. Précisez le format de la netlist
    240 dans la variable d'entrée '''MBK_IN_LO''' avant la simulation.
    241 {{{
    242 > export MBK_IN_LO=al
    243 }}}
    244 
    245  '''Faites attention au fichier CATAL!'''
    246   * Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau
    247  transistor :
    248 {{{
    249 > cougar -v -t amd2901_chip_r amd2901_chip_r_t
    250 }}}
    251 
    252  = Conclusion =
    253 Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception
    254 "back-end" et la validation d'un circuit réalisé en cellules précaractérisées avec préplacement
    255 des parties régulières.
    256 
    257 Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
    258 Le compte-rendu du TP doit comporter :
    259 
    260 Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez
    261 libre accès à vos répertoires en lecture !).
    262 Une description exacte de la méthodologie employée, incluant les éventuels probl
    263 èmes rencontrés.
    264 
    265  
    266 Pour l'amd2901, décrivez le flot de conception. Quels choix avez-vous retenus
    267 pour le placement des colonnes du chemin de données, votre circuit est-il limité
    268 par les plots ou par la taille du coeur (pad limited ou core limited)... Quels
    269 sont les résultats donnés par lvx... Les schémas sont appréciés.
    270 
    271 Les Makeles du flot total. ( Les Makefiles seront testés à la fin de ce TP)
    272 NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES).
    273 Merci et bon courage !
    274 
    275