Changes between Version 9 and Version 10 of ToolsCourseTp7


Ignore:
Timestamp:
May 9, 2007, 3:50:07 PM (18 years ago)
Author:
anne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp7

    v9 v10  
    66
    77
    8      Vous aurez besoin de tous les fichiers que vous avez générés lors des TP3 et 4, à savoir :
    9  amd2901_ctl.vbe, description comportementale de la partie contrôle
    10  amd2901_dpt.vbe, description comportementale de la partie chemin de données
    11  amd2901_dpt.py, fichier python en stratus de la partie chemin de données (à
    12 compléter)
    13  execute_amd2901_dpt.py, description structurelle en STRATUS d'instanciation
    14 du chemin de données
    15  pattern.pat, fichier de tests
    16  Makefile, qui automatise le flot de conception du TP3 et 4.
    17 Ainsi que des fichiers fournis lors du TP3 et 4  que vous devrez compléter :
     8  = 7.5 Travail sur le coeur : Préplacement des structures régulières =
     9  Prenez le fichier amd2901_core.py et effectuez les étapes suivantes dans la méthode
     10Layout :
    1811
    19  amd2901_core.py, description structurelle en STRATUS du coeur du circuit
    20  amd2901_chip.py, description structurelle en STRATUS du circuit complet
    21 Il faut maintenant enrichir les fichiers .py avec les étapes de placement-routage.
     12 Placer le chemin de données : fonction Place ()
     13 
     14 Agrandir la boite d'aboutement du coeur : fonction ResizeAb ()
    2215
    23 = 7.1 Outils utilisés =
    24 Vous allez utiliser les outils de placement flot Coriolis et le routeur d'Alliance, ainsi
    25 que tous les outils de vérification vus dans la première partie de ce TP.
    26 Vous utiliserez aussi lvx, le comparateur de netlists. Lorsque le système est trop complexe
    27 il est difficile d'utiliser proof, le comparateur formel (calculs trop long). On utilise
    28 alors une comparaison de netlists. Essayez les deux méthodes (proof et lvx).
    29 4.2 Environnement technologique
    30 Outre l'environnement technologique de la première partie du TP, vous devez positionner
    31 :
    32 > export VH_MAXERR=10
     16 Placer les rails de rappels d'alimentation dans le coeur : fonctions AlimVerticalRail
     17() et AlimHorizontalRail ()
    3318
    34 > export MBK_WORK_LIB=.
     19  Placer les connecteurs du coeur : fonction AlimConnectors ()
    3520
    36 > export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib
     21  ATTENTION : La logique "irrégulière" constituant la partie contrôle n'a pas besoin
     22 d'être placée explicitement. Cela sera fait automatiquement par la suite !
    3723
    38 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/dp_sxlib
    39 
    40 > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/pxlib
    41 
    42 > export MBK_CATA_LIB=$MBK_CATA_LIB :.
    43 
    44 > export MBK_CATAL_NAME=CATAL
    45 
    46 > export MBK_IN_LO=vst
    47 
    48 > export MBK_OUT_LO=vst
    49 
    50 > export MBK_IN_PH=ap
    51 
    52 > export MBK_OUT_PH=ap
    53 
    54 > export CRL_OUT_LO=vst
    55 
    56 > export CRL_OUT_PH=ap
    57 
    58 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/stratus
    59 
    60 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH
    61 
    62 > export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages :$PYTHONPATH
    63 
    64 NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être
    65 utile de les vérifier.
    66 = 7.3 Précautions quant au nommage des fichiers =
    67 D'une manière générale, les fichiers décrivant une netlist logique doivent porter le
    68 même nom que le fichier correspondant décrivant la vue physique. C'est à dire que
    69 le fichier amd2901_dpt.vst (vue logique) doit correspondre au fichier amd2901_dpt.ap
    70 (vue physique). Il en va de même pour le fichier amd2901_core.
    71 
    72 = 7.4 Travail sur le chemin de données : Préplacement des opérateurs =
    73 
    74 Le TP 3 et 4 vous a permis de décrire la netlist hiérarcique du chemin de donn
    75 ées. Vous allez maintenant placer les colonnes du chemin de données de manière à
    76 profiter de la régularité du chemin de données.
    77 Pour réaliser votre placement des opérateurs, vous disposez des fonctions de STRATUS
    78 suivantes :
    79  Place()
    80 
    81  PlaceRight(), PlaceTop(), PlaceLeft(), PlaceBottom()
    82 
    83  SetRefIns()
    84 
    85  DefAb(), ResizeAb()
    86 
    87      Toutes ces fonctions doivent être utilisées dans la méthode Layout.
    88  Reprenons l'exemple du TP 3, on donne le code suivant pour le fichier circuit.py :
    89 #!/usr/bin/env python
    90 
    91 from stratus import *
    92 
    93 # definition de la cellule
    94 
    95 class circuit ( Model ):
    96 
    97 ...
    98 
    99 def Layout ( self ):
    100 
    101 Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) )
    102 
    103 PlaceRight ( self.instance_or2_4bits, NOSYM )
    104 
    105 PlaceRight ( self.instance_add2_4bits, NOSYM )
    106 
    107 Ensuite pour le fichier test_circuit.py, il faut rajouter l'appel à la méthode Layout :
    108 
    109 #!/usr/bin/env python
    110 
    111 from stratus import *
    112 
    113 from circuit import circuit
    114 
    115 my_circuit = circuit ( "mon_circuit" ) # creation du circuit
    116 
    117 my_circuit.Interface() # creation de l’interface
    118 
    119 my_circuit.Netlist() # creation de la netlist
    120 
    121 my_circuit.Layout() # creation du layout
    122 
    123 my_circuit.View() # pour afficher le layout
    124 
    125 my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap
     24Vérifiez le résultat :
     25{{{
     26> ./execute_amd2901_core.py
     27}}}
    12628
    12729
    128           Reprenez le fichier amd2901_dpt.py. Pour l'instant, ce fichier ne comporte qu'une
    129 description de la netlist. Cela vous a permis de générer une description structurelle
    130 sous la forme d'un fichier .vst. Il s'agit maintenant de placer explicitement les colonnes.
    131 Le placement des colonnes du chemin de données ne doit pas être
    132 fait au hasard. La faisabilité et la qualité du routage en dépendent !
    133 Aidez-vous du manuel de STRATUS :
    134 file :///opt/coriolis/share/doc/en/html/stratus/index.html
    135 Utilisez STRATUS pour générer le tout :
    136 > ./execute_amd2901_dpt.py
    137 La gure 13 résume le processus suivi et la gure 14 montre une vue du résultat.
    138 
    139 
    140  = 7.5 Travail sur le coeur : Préplacement des structures régulières =
    141 Prenez le fichier amd2901_core.py et effectuez les étapes suivantes dans la méthode
    142 Layout :
    143  Placer le chemin de données : fonction Place ()
    144  Agrandir la boite d'aboutement du coeur : fonction ResizeAb ()
    145  Placer les rails de rappels d'alimentation dans le coeur : fonctions AlimVerticalRail
    146 () et AlimHorizontalRail ()
    147   Placer les connecteurs du coeur : fonction AlimConnectors ()
    148 ATTENTION : La logique "irrégulière" constituant la partie contrôle n'a pas besoin
    149 d'être placée explicitement. Cela sera fait automatiquement par la suite !
    150 Vérifiez le résultat :
    151 > ./execute_amd2901_core.py
    15230 = 7.6 Travail sur le cicuit complet=
    15331
    154 Prenez le fichier amd2901_chip.py et complétez la méthode Layout.
     32  Prenez le fichier amd2901_chip.py et complétez la méthode Layout.
     33
    15534= 7.6.1 Placement de la couronne de plots et du coeur =
    156 Dans le fichier amd2901_chip.py fourni, les plots sont instanciés dans la méthode
     35
     36 Dans le fichier amd2901_chip.py fourni, les plots sont instanciés dans la méthode
    15737Netlist :
    15838def Netlist ( self ) :
    15939...
    160 Inst ( "pck_px", "p_ck"
    161 , map = { ’pad’ : self.ck
    162 , ’ck’ : cki
    163 , ’vddi’ : self.vdd
    164 , ’vssi’ : self.vss
    165 , ’vdde’ : self.vdde
    166 , ’vsse’ : self.vsse
    167 }
    168 )
    169 Il vous faut donc, dans la méthode Layout :
     40  Inst ( "pck_px", "p_ck"
     41        , map = { ’pad’ : self.ck
     42                 , ’ck’ : cki
     43                 , ’vddi’ : self.vdd
     44                 , ’vssi’ : self.vss
     45                 , ’vdde’ : self.vdde
     46                 , ’vsse’ : self.vsse
     47                 }
     48       )
     49
     50 Il vous faut donc, dans la méthode Layout :
    17051
    17152
    17253 Définir la taille de la boîte d'aboutement globale du circuit de façon à ce que
    173 les plots puissent être placés à la périphérie : fonction DefAb () (Commencer par
    174 définir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la
    175 diminuer)
    176 Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
    177 PlaceCentric ()
     54 les plots puissent être placés à la périphérie : fonction DefAb () (Commencer par
     55 définir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la
     56 diminuer)
     57
     58 Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
     59  PlaceCentric ()
     60
    17861 Définir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se
    179 fait à l'aide des 4 fonctions : PadNorth (), PadSouth (), PadEast () et PadWest ().
     62 fait à l'aide des 4 fonctions : PadNorth (), PadSouth (), PadEast () et PadWest ().
     63
    18064Vérifiez le résultat :
     65{{{
    18166> ./execute_amd2901_chip.py
    182 4.6.2 Routage des alimentations
     67}}}
     68
     69=7.6.2 Routage des alimentations =
    18370Vous devez utiliser la fonction PowerRing () pour créer la grille d'alimentation.
    18471Vérifiez le résultat :
     72{{{
    18573> ./execute_amd2901_chip.py
     74}}}
    18675
    187 FIG. 16 – Zoom sur le placement des plots et les courrones d'alimentations
    18876
    18977 = 7.6.3 Placement de la logique irrégulière =
    19078   C'est le placeur Mistral qui se charge de placer les cellules de la partie de contrôle.
    191 Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
    192 utilisant les zones "vides". Pour appeler le placeur Mistral, vous devez faire appel à la
    193 fonction PlaceGlue ().
     79 Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
     80 utilisant les zones "vides". Pour appeler le placeur Mistral, vous devez faire appel à la
     81 fonction PlaceGlue ().
    19482
    19583
    196 Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
    197 que les plots soient placés. L'outil de placement du flot CORIOLIS place les cellules
    198 en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà
     84  Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
     85  que les plots soient placés. L'outil de placement du flot CORIOLIS place les cellules
     86 en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà
    19987placées.
     88
    20089Vérifiez le résultat :
     90{{{
    20191> ./execute_amd2901_chip.py
     92}}}
    20293
     94[[Image(placement.jpg,nolink)]]
    20395
    204 Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue
     96 Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue
    20597le placement automatique de cellules de bourrage.
    20698
    20799Vérifiez le résultat :
     100
     101{{{
    208102> ./execute_amd2901_chip.py
    209 
     103}}}
    210104
    211105 = 7.6.4 Routage des signaux d'horloge =
     106
    212107Vous devez utiliser la fonction RouteCk () qui route le signal d'horloge.
    213108Vérifiez le résultat :
     109{{{
    214110> ./execute_amd2901_chip.py
    215 FIG. 20  Zoom sur le routage d'horloge
     111}}}
     112
    216113
    217114
    218115 = 7.6.5 Routage des signaux logiques =
    219 Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux
    220 d'alimentation en utilisant NERO de la manière suivante :
     116 Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux
     117 d'alimentation en utilisant NERO de la manière suivante :
     118{{{
    221119> nero -V -p amd2901_chip amd2901_chip amd2901_chip_r
    222 L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le
    223 troisième argument est la netlist du chip, le quatrième est le fichier résultat.
    224 NOTA BENE : La variable MBK_CATA_LIB ne doit contenir qu'une seule fois les
    225 chemins d'accès aux bibliothèques.
     120}}}
     121
     122 L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le
     123 troisième argument est la netlist du chip, le quatrième est le fichier résultat.
     124
     125
     126 NOTA BENE : La variable MBK_CATA_LIB ne doit contenir qu'une seule fois les
     127 chemins d'accès aux bibliothèques.
     128
    226129= 7.6.6 Validation du chip =
    227 On validera le travail de NERO avec les outils druc, cougar et lvx.
     130
     131  On validera le travail de NERO avec les outils druc, cougar et lvx.
     132{{{
    228133> druc amd2901_chip_r
    229134> export MBK_OUT_LO=al
    230135> cougar -f amd2901_chip_r
    231136> lvx vst al amd2901_chip amd2901_chip_r -f
    232 Simulez à nouveau la netlist extraite avec ASIMUT. Précisez le format de la netlist
    233 dans la variable d'entrée MBK_IN_LO avant la simulation.
     137}}}
     138
     139  Simulez à nouveau la netlist extraite avec ASIMUT. Précisez le format de la netlist
     140 dans la variable d'entrée MBK_IN_LO avant la simulation.
     141{{{
    234142> export MBK_IN_LO=al
    235 Faites attention au fichier CATAL!
    236 Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau
    237 transistor :
     143}}}
     144
     145 Faites attention au fichier CATAL!
     146 Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau
     147 transistor :
     148{{{
    238149> cougar -v -t amd2901_chip_r amd2901_chip_r_t
     150}}}
     151
    239152 = Conclusion =
    240 Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception
    241 "back-end" et la validation d'un circuit réalisé en cellules précaractérisées avec préplacement
    242 des parties régulières.
    243 Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
    244 Le compte-rendu du TP doit comporter :
     153  Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception
     154  "back-end" et la validation d'un circuit réalisé en cellules précaractérisées avec préplacement
     155  des parties régulières.
     156
     157 Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
     158 Le compte-rendu du TP doit comporter :
     159
    245160 Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez
    246 libre accès à vos répertoires en lecture !).
     161 libre accès à vos répertoires en lecture !).
    247162   Une description exacte de la méthodologie employée, incluant les éventuels probl
    248 èmes rencontrés.
    249  Pour la conception de cellules sous graal, expliquez vos choix (pourquoi avoir
    250 placé un via ici plutôt que là...), quelle est la taille de vos cellules, quelles sont
    251 les performances probables, quelles améliorations envisagez-vous... Des captures
    252 d'écrans sont les bienvenues (dans la mesure du possible).
     163  èmes rencontrés.
     164
     165 
    253166 Pour l'amd2901, décrivez le flot de conception. Quels choix avez-vous retenus
    254167pour le placement des colonnes du chemin de données, votre circuit est-il limité
    255168par les plots ou par la taille du coeur (pad limited ou core limited)... Quels
    256169sont les résultats donnés par lvx... Les schémas sont appréciés.
     170
    257171 Les Makeles du flot total. ( Les Makefiles seront testés à la fin de ce TP)
    258172NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES).