Changes between Version 16 and Version 17 of ToolsCourseTp8


Ignore:
Timestamp:
Sep 22, 2008, 9:10:07 PM (16 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp8

    v16 v17  
    22{{{
    33#!html
    4 <h1> TP8 : Placement et routage du circuit AM2901</h1>
     4<h1> TP8 : Vérification temporelle</h1>
    55}}}
    66
    77[[PageOutline]]
    88
    9 = 1 Objectif  =
     91 Introduction
    1010
    11 Le but de ce TP est d'utiliser les outils de placement / routage automatique du flot Coriolis/Alliance,
    12 ainsi que tous les outils de vérification vus dans les TPs précédents, pour générer le
    13 dessin des masques du circuit AM2901.
     11'''TAS''' est un analyseur temporel.
     12Il permet d'obtenir les temps de propagation minimaux et maximaux  entre les points de référence
     13(c'est à dire les '''connecteurs externes''' et les '''points mémorisants''') d'un circuit.
     14'''TAS''' travaille sans stimuli, c'est pourquoi il donne des délais '''pire-cas''' pour les chaînes longues.
    1415
    15 Le TP4 vous a permis d'utiliser le langage '''stratus''' pour décrire la netlist hiérarchique
    16 du circuit AM2901.
     162 Travail à effectuer
    1717
    18 On va maintenant utiliser le langage '''stratus''' pour introduire des directives de placement
    19 dans les différents fichiers ''.py'' décrivant  la ''net-list''.
     18L'environnement doit être correctement initialisé de faço à pouvoir utiliser '''TAS''' :
    2019
    21 Il est par exemple possible d'exploiter la régularité des opérateurs du chemin de données
    22 pour imposer un placement en colonnes : tous les bits d'un même opérateur sont placés
    23 en colonne, et il est possible d'imposer un placement relatifn des colonnes les unes par
    24 rapport aux autres.
    25 On va également définir le placement des plots d'entrée/sortie sur la périphérie du circuit.
    26 
    27 Par ailleurs, on va également utiliser '''stratus''' pour effectuer le routage de certains signaux
    28 particuliers comme les alimentations VSS et VDD.
    29 
    30 Le routage final sera effectué par l'outil '''nero'''.
    31 
    32 Vous utiliserez aussi '''cougar''' pour obtenir une net list extraite, et '''lvx''', pour
    33 comparer la ''net-list'' extraite à la ''net-list'' initiale.
    34 
    35 Vous utiliserez conjointement les cellules de la bibliothèque '''SXLIB''',
    36 et les macro-cellules génériques de la bibliothèque '''DP_SXLIB'''.
    37 
    38 = 2 Variables d'environnement =
    39 
    40 Vous devez positionner les variables d'environnement suivantes :
    41 
     20  * Donner comme fichier technologie gràce à la variable d'environnement
    4221{{{
    43 > export VH_MAXERR=10
    44 > export MBK_WORK_LIB=.
    45 > export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib
    46 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/dp_sxlib
    47 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/pxlib
    48 > export MBK_CATA_LIB=$MBK_CATA_LIB :.
    49 > export MBK_CATAL_NAME=CATAL
    50 > export MBK_IN_LO=vst
    51 > export MBK_OUT_LO=vst
    52 > export MBK_IN_PH=ap
    53 > export MBK_OUT_PH=ap
    54 > export CRL_OUT_LO=vst
    55 > export CRL_OUT_PH=ap
    56 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/stratus
    57 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH
    58 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages :$PYTHONPATH
     22export ELP_TECHNO_NAME=/users/soft/techno/labo/035/elp/prol035.elp
    5923}}}
    60 NB : Ces variables d'environnement sont positionnées par défaut, mais il est
    61 utile de les vérifier.
    62 
    63 D'une manière générale, les fichiers décrivant une ''net-list'' logique doivent porter le
    64 même nom que le fichier correspondant décrivant la vue physique.
    65 
    66 C'est à dire que le fichier am2901_dpt.vst (vue logique) doit correspondre au fichier am2901_dpt.ap
    67 (vue physique). Il en va de même pour am2901_core.
    68 
    69 = 3 Fonctions de placement fournies par STRATUS =
    70 
    71 Pour définir les directives de placement, le langage '''stratus''' fournit les fonctions' suivantes :
    72  *   Place()
    73  *  !PlaceRight(), !PlaceTop(), !PlaceLeft(), !PlaceBottom()
    74  *  !SetRefIns()
    75  *  !DefAb(), !ResizeAb()
    76 
    77 Vous pouvez consulter le manuel de STRATUS en ligne :
    78 
    79 https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/stratus/index.html
    80 
    81 
    82 Toutes ces fonctions doivent être utilisées dans la méthode ''Layout'' associée au bloc considéré.
    83 A titre d'exemple, on donne le code suivant pour le fichier circuit.py :
     24  * Préciser le format d'entrée ('''.al''') dans la variable d'environnement MBK_IN_LO.
     25  * Mettre en place l'environnement pour l'analyse de timing :
    8426{{{
    85 #!/usr/bin/env python
    86 from stratus import *
    87 # definition du bloc de nom "circuit"
    88 class circuit ( Model ):
    89 ...
    90 # on suppose que les instances i1, i2, i3 ont été créées
    91   def Layout ( self ):
    92     Place ( self.i1, NOSYM, XY ( 0, 0 ) )
    93     PlaceRight ( self.i2, NOSYM )
    94     PlaceRight ( self.i3, NOSYM )
    95 }}}
    96 Ensuite pour générer le fichier circuit.ap, il faut rajouter l'appel à la méthode Layout
    97 dans le fichier ''test_circuit.py'' et ne pas oublier de sauvegarder le résultat sur disque:
    98 
    99 {{{
    100 # creation de la vue physique (placement)
    101 my_circuit.Layout()
    102 
    103 # sauver les fichiers ''mon_circuit.vst'' et ''mon_circuit.ap''
    104 my_circuit.Save ( PHYSICAL )
     27source avt_env.sh
    10528}}}
    10629
    107 = 4 Placement explicite des opérateurs du chemin de données =
     30  == 2.1 Chaines longues ==
    10831
    109 Reprenez votre fichier ''am2901_dpt.py'' du TP4. Pour l'instant, ce fichier ne comporte qu'une
    110 description de la ''net-list'', qui a permis de générer un fichier ''am2901_dpt.vst.
    111 Si le fichier que vous avez écrit n'a pas pu être validé pendant le TP4, vous pouvez utiliser
    112 le fichier attaché ci-dessous.
    113 Il s'agit maintenant de placer explicitement les colonnes
    114 représentants les différents opérateurs 4 bits du chemin de données les unes par rapport
    115 aux autres, en ajoutant une méthode Layout dans ce fichier.
    116 
    117 Après avoir modifié le fichier ''am2901_dpt.py'' générez le fichier de placement ''am2901_dpt.ap'' :
     32  * Il suffit ensuite de l'ancer l'outil '''TAS''' :
    11833{{{
    119 > ./execute_amd2901_dpt.py
     34tas -t nom_de_fichier
     35}}}
     36  * Consulter le man de '''TAS''' et essayer les différentes options pour comprendre le fonctionnement de '''TAS'''.
     37  * Utiliser '''XTAS''' qui permet d'interpréter les résultats de '''TAS'''.
     38    Disposant lui aussi d'un man, '''XTAS''' est agrémenté d'une aide en ligne.
     39{{{
     40xtas
    12041}}}
    12142
    122   = 5 placement du coeur =
     43'''XTAS vous permet de visualiser les chaines longues entre les points de référence du circuit et leur temps (entrées, registres, sorties).'''
     44 
     45Pour les nostalgiques de l'écran vert il existe un outil similaire en ligne de commande qui s'appelle '''ETAS''' (voir l'aide en ligne qui s'affiche avec la
     46commande help sous '''ETAS''').
    12347
    124 Reprenez votre fichier  ''am2901_core.py'' décrivant le coeur du circuit AM2901,
    125 et introduisez  les étapes suivantes dans la méthode Layout :
    126 (Si le fichier que vous avez écrit n'a pas pu être validé pendant le TP4, vous pouvez utiliser
    127 le fichier attaché ci-dessous).
     48  == 2.2 Amélioration de la chaîne longue ==
    12849
    129   * Placer le chemin de données : fonction Place ()
    130  
    131   * Agrandir la boite d'aboutement du coeur : fonction !ResizeAb ()
    132   Cette étape est utile pour réserver la place nécessaire au placement des cellules de la partie contrôle.
    133   La logique "irrégulière" constituant la partie contrôle n'a pas besoin
    134   d'être placée explicitement. Cela sera fait automatiquement par la suite !
     50  * Créer un second répertoire et copier tous les fichiers sources de l'AM2901 dans celui ci.
     51  * A partir des chaînes longues étudiées précédemment, reprendre la procédure de création de l'AM2901 ''à zéro'' essayant d'améliorer le temps.
    13552
    136 
    137   * Placer les rails de rappels d'alimentation dans le coeur :
    138     fonctions !AlimVerticalRail () et !AlimHorizontalRail ()
    139 
    140   * Placer les connecteurs du coeur : fonction !AlimConnectors ()
    141 
    142   * Vérifier le résultat :
    143 {{{
    144 > ./execute_am2901_core.py
    145 }}}
    146 
    147 = 6 Placement de la couronne de plots autour du coeur =
    148 
    149 Reprenez le fichier ''am2901_chip.py'' du TP4  (circuit complet avec les plots), et ajoutez une méthode Layout
    150 comme indiqué ci-dessous.
    151 (Si le fichier que vous avez écrit n'a pas pu être validé pendant le TP4, vous pouvez utiliser
    152 le fichier attaché ci-dessous).
    153 
    154 Il faut  compléter ce fichier, en ajoutant les directives suivantes dans la méthode Layout :
    155 
    156   * Définir la taille de la boîte d'aboutement globale du circuit de façon à ce que
    157 les plots puissent être placés à la périphérie : fonction !DefAb () (On peut commencer par
    158 définir une boite d'aboutement de 4000 par 4000 et essayer ensuite de la réduire)
    159 
    160   * Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
    161   !PlaceCentric ()
    162 
    163   * Définir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se
    164  fait à l'aide des 4 fonctions : !PadNorth (), !PadSouth (), !PadEast () et !PadWest ().
    165 
    166   * Vérifier le résultat :
    167 {{{
    168 > ./execute_amd2901_chip.py
    169 }}}
    170 
    171 = 7 Routage des alimentations =
    172 
    173 Vous devez utiliser la fonction !PowerRing () pour créer la grille d'alimentation, et
    174 Vérifier le résultat :
    175 {{{
    176 > ./execute_amd2901_chip.py
    177 }}}
    178 
    179 
    180 = 8 Placement de la logique irrégulière =
    181 
    182 C'est le placeur '''mistral''' qui se charge de placer automatiquement les cellules non encore placées.
    183 Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
    184 utilisant les zones "vides". Pour appeler le placeur '''mistral''', vous devez faire appel à la
    185 fonction ''!PlaceGlue ()''
    186 
    187 [[Image(zoomPlaceGlue.jpg,nolink)]]
    188 
    189 Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
    190 avoir préalablement défini la position des plots d'entrée/sortie sur les 4 faces du circuit.
    191 L'outil de placement automatique place les cellules non placées en se basant sur les attirances
    192 vers les plots ainsi que vers les cellules déjà placées.
    193 
    194 Vérifiez le résultat :
    195 {{{
    196 > ./execute_amd2901_chip.py
    197 }}}
    198 
    199 Le placement automatique se termine par l'appel à la fonction !FillCell () qui effectue
    200 le placement automatique de cellules de bourrage.
    201 [[Image(zoomFillCell.jpg,nolink)]]
    202 
    203 Vérifiez le résultat :
    204 
    205 {{{
    206 > ./execute_amd2901_chip.py
    207 }}}
    208 
    209 = 9 Routage des signaux d'horloge =
    210 
    211 Vous devez utiliser la fonction !RouteCk () qui construit le réseau maillé
    212 correspondant au signal d'horloge interne,
    213 
    214 Vérifiez le résultat :
    215 {{{
    216 > ./execute_amd2901_chip.py
    217 }}}
    218 
    219 [[Image(zoomCk.jpg,nolink)]]
    220 
    221 = 10 Routage des signaux logiques =
    222 
    223 L'appel au routeur automatique '''nero''' n'est pas encore intégré dans le langage '''stratus'''.
    224 Pour effectuer le routage de tous les signaux autres que le signal d'horloge et les signaux
    225 d'alimentation, il faut lancer '''nero''' de la manière suivante :
    226 {{{
    227 > nero -V -p amd2901_chip amd2901_chip amd2901_chip_r
    228 }}}
    229 
    230 L'option -p indique que vous fournissez un fichier de placement en argument. Le
    231 deuxième argument est le fichier définissant la ''net-list'', le troisième est le
    232 nom du fichier résultat.
    233 
    234 = 11 Validation =
    235 
    236  
    237  *  On validera le routage en utilisant les les outils '''druc''', '''cougar''' et '''lvx''',
    238 comme cela a été fait dans le TP7.
    239 
    240 {{{
    241 > druc amd2901_chip_r
    242 > export MBK_OUT_LO=al
    243 > cougar -f amd2901_chip_r
    244 > lvx vst al amd2901_chip amd2901_chip_r -f
    245 }}}
    246 
    247   *  Vous pouvez resimuler la netlist extraite avec '''asimut'''. Précisez le format de la netlist
    248 dans la variable d'entrée '''MBK_IN_LO''' avant la simulation.
    249 {{{
    250 > export MBK_IN_LO=al
    251 }}}
    252 
    253   * Pour connaitre le nombre de transistors, on peut effectuer une extraction au niveau transistors :
    254 {{{
    255 > cougar -v -t amd2901_chip_r amd2901_chip_r_t
    256 }}}
    257 
    258 = 12 Conclusion =
    259 
    260 Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception
    261 physique d'un circuit réalisé en cellules précaractérisées avec préplacement
    262 des parties régulières.
    263 
    264 Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
    265 
    266 Le compte-rendu du TP doit comporter :
    267 
    268 Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez
    269 libre accès à vos répertoires en lecture !).
    270 
    271 Décrivez précisément le flot de conception. Quels choix avez-vous retenus
    272 pour le placement des colonnes du chemin de données, votre circuit est-il limité
    273 par les plots ou par la taille du coeur (pad limited ou core limited)... Quels
    274 sont les résultats donnés par lvx... Les schémas sont appréciés.
    275 
    276 Fournissez es Makefiles du flot total. ( Les Makefiles seront testés à la fin de ce TP)
    277 NE PAS JOINDRE DE LISTINGS DE FICHIERS AUTRES QUE LES MAKEFILES.
    278 
    279 
    280 
     53Différentes étapes de conception peuvent être amenées à être ré-étudiées ; le placement choisi pour le chemin de données entre autres ...