Changes between Version 9 and Version 10 of ToolsCourseTp7
- Timestamp:
- May 9, 2007, 3:50:07 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ToolsCourseTp7
v9 v10 6 6 7 7 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 10 Layout : 18 11 19 amd2901_core.py, description structurelle en STRATUS du coeur du circuit20 amd2901_chip.py, description structurelle en STRATUS du circuit complet21 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 () 22 15 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 () 33 18 34 > export MBK_WORK_LIB=. 19 Placer les connecteurs du coeur : fonction AlimConnectors () 35 20 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 ! 37 23 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 24 Vérifiez le résultat : 25 {{{ 26 > ./execute_amd2901_core.py 27 }}} 126 28 127 29 128 Reprenez le fichier amd2901_dpt.py. Pour l'instant, ce fichier ne comporte qu'une129 description de la netlist. Cela vous a permis de générer une description structurelle130 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 être132 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.html135 Utilisez STRATUS pour générer le tout :136 > ./execute_amd2901_dpt.py137 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éthode142 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 AlimVerticalRail146 () 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 besoin149 d'être placée explicitement. Cela sera fait automatiquement par la suite !150 Vérifiez le résultat :151 > ./execute_amd2901_core.py152 30 = 7.6 Travail sur le cicuit complet= 153 31 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 155 34 = 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 157 37 Netlist : 158 38 def Netlist ( self ) : 159 39 ... 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 : 170 51 171 52 172 53 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 178 61 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 180 64 Vérifiez le résultat : 65 {{{ 181 66 > ./execute_amd2901_chip.py 182 4.6.2 Routage des alimentations 67 }}} 68 69 =7.6.2 Routage des alimentations = 183 70 Vous devez utiliser la fonction PowerRing () pour créer la grille d'alimentation. 184 71 Vérifiez le résultat : 72 {{{ 185 73 > ./execute_amd2901_chip.py 74 }}} 186 75 187 FIG. 16 Zoom sur le placement des plots et les courrones d'alimentations188 76 189 77 = 7.6.3 Placement de la logique irrégulière = 190 78 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 en192 utilisant les zones "vides". Pour appeler le placeur Mistral, vous devez faire appel à la193 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 (). 194 82 195 83 196 Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut197 que les plots soient placés. L'outil de placement du flot CORIOLIS place les cellules198 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à 199 87 placées. 88 200 89 Vérifiez le résultat : 90 {{{ 201 91 > ./execute_amd2901_chip.py 92 }}} 202 93 94 [[Image(placement.jpg,nolink)]] 203 95 204 Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue96 Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue 205 97 le placement automatique de cellules de bourrage. 206 98 207 99 Vérifiez le résultat : 100 101 {{{ 208 102 > ./execute_amd2901_chip.py 209 103 }}} 210 104 211 105 = 7.6.4 Routage des signaux d'horloge = 106 212 107 Vous devez utiliser la fonction RouteCk () qui route le signal d'horloge. 213 108 Vérifiez le résultat : 109 {{{ 214 110 > ./execute_amd2901_chip.py 215 FIG. 20 Zoom sur le routage d'horloge 111 }}} 112 216 113 217 114 218 115 = 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 {{{ 221 119 > 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 226 129 = 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 {{{ 228 133 > druc amd2901_chip_r 229 134 > export MBK_OUT_LO=al 230 135 > cougar -f amd2901_chip_r 231 136 > 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 {{{ 234 142 > 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 {{{ 238 149 > cougar -v -t amd2901_chip_r amd2901_chip_r_t 150 }}} 151 239 152 = 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 245 160 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 !). 247 162 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 253 166 Pour l'amd2901, décrivez le flot de conception. Quels choix avez-vous retenus 254 167 pour le placement des colonnes du chemin de données, votre circuit est-il limité 255 168 par les plots ou par la taille du coeur (pad limited ou core limited)... Quels 256 169 sont les résultats donnés par lvx... Les schémas sont appréciés. 170 257 171 Les Makeles du flot total. ( Les Makefiles seront testés à la fin de ce TP) 258 172 NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES).