| 1 | {{{ |
| 2 | #!html |
| 3 | <h1> TP7 : Placement et routage du circuit AMD2901</h1> |
| 4 | }}} |
| 5 | [[PageOutline]] |
| 6 | Séances 3 et 4 : Placement et Routage du circuit Amd2901 |
| 7 | Vous aurez besoin de tous les chiers que vous avez générés lors du TP2, à savoir : |
| 8 | amd2901_ctl.vbe, description comportementale de la partie contrôle |
| 9 | amd2901_dpt.vbe, description comportementale de la partie chemin de données |
| 10 | amd2901_dpt.py, chier python en stratus de la partie chemin de données (à |
| 11 | compléter) |
| 12 | execute_amd2901_dpt.py, description structurelle en STRATUS d'instanciation |
| 13 | du chemin de données |
| 14 | pattern.pat, chier de tests |
| 15 | Makele, qui automatise le ot de conception du TP2. |
| 16 | Ainsi que des chiers fournis lors du TP 3 que vous devrez compléter : |
| 17 | ( répertoire : ~trncomun/TP/2006/TP3/Fichiers/Fournis/amd2901/ ) |
| 18 | amd2901_core.py, description structurelle en STRATUS du coeur du circuit |
| 19 | amd2901_chip.py, description structurelle en STRATUS du circuit complet |
| 20 | Il faut maintenant enrichir les chiers .py avec les étapes de placement-routage. |
| 21 | 4.1 Outils utilisés |
| 22 | Vous allez utiliser les outils de placement ot Coriolis et le routeur d'Alliance, ainsi |
| 23 | que tous les outils de vérication vus dans la première partie de ce TP. |
| 24 | Vous utiliserez aussi lvx, le comparateur de netlists. Lorsque le système est trop complexe |
| 25 | il est difcile d'utiliser proof, le comparateur formel (calculs trop long). On utilise |
| 26 | alors une comparaison de netlists. Essayez les deux méthodes (proof et lvx). |
| 27 | 4.2 Environnement technologique |
| 28 | Outre l'environnement technologique de la première partie du TP, vous devez positionner |
| 29 | : |
| 30 | > export VH_MAXERR=10 |
| 31 | > export MBK_WORK_LIB=. |
| 32 | > export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib |
| 33 | > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/dp_sxlib |
| 34 | > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/pxlib |
| 35 | > export MBK_CATA_LIB=$MBK_CATA_LIB :. |
| 36 | > export MBK_CATAL_NAME=CATAL |
| 37 | > export MBK_IN_LO=vst |
| 38 | > export MBK_OUT_LO=vst |
| 39 | > export MBK_IN_PH=ap |
| 40 | > export MBK_OUT_PH=ap |
| 41 | > export CRL_OUT_LO=vst |
| 42 | > export CRL_OUT_PH=ap |
| 43 | Master ACSI 13 |
| 44 | TP3 Vue physique : placement et routage |
| 45 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages/stratus |
| 46 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH |
| 47 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages :$PYTHONPATH |
| 48 | NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être |
| 49 | utile de les vérier. |
| 50 | 4.3 Précautions quant au nommage des chiers |
| 51 | D'une manière générale, les chiers décrivant une netlist logique doivent porter le |
| 52 | même nom que le chier correspondant décrivant la vue physique. C'est à dire que |
| 53 | le chier amd2901_dpt.vst (vue logique) doit correspondre au chier amd2901_dpt.ap |
| 54 | (vue physique). Il en va de même pour le chier amd2901_core. |
| 55 | 4.4 Travail sur le chemin de données : Préplacement des opérateurs |
| 56 | Le TP numéro 2 vous a permis de décrire la netlist hiérarcique du chemin de donn |
| 57 | ées. Vous allez maintenant placer les colonnes du chemin de données de manière à |
| 58 | proter de la régularité du chemin de données. |
| 59 | Pour réaliser votre placement des opérateurs, vous disposez des fonctions de STRATUS |
| 60 | suivantes : |
| 61 | Place() |
| 62 | PlaceRight(), PlaceTop(), PlaceLeft(), PlaceBottom() |
| 63 | SetRefIns() |
| 64 | DefAb(), ResizeAb() |
| 65 | Toutes ces fonctions doivent être utilisées dans la méthode Layout. |
| 66 | Reprenons l'exemple du TP 2, on donne le code suivant pour le chier circuit.py : |
| 67 | #!/usr/bin/env python |
| 68 | from stratus import * |
| 69 | # definition de la cellule |
| 70 | class circuit ( Model ): |
| 71 | ... |
| 72 | def Layout ( self ): |
| 73 | Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) ) |
| 74 | PlaceRight ( self.instance_or2_4bits, NOSYM ) |
| 75 | PlaceRight ( self.instance_add2_4bits, NOSYM ) |
| 76 | Ensuite pour le chier test_circuit.py, il faut rajouter l'appel à la méthode Layout : |
| 77 | #!/usr/bin/env python |
| 78 | from stratus import * |
| 79 | from circuit import circuit |
| 80 | my_circuit = circuit ( "mon_circuit" ) # creation du circuit |
| 81 | my_circuit.Interface() # creation de l’interface |
| 82 | my_circuit.Netlist() # creation de la netlist |
| 83 | my_circuit.Layout() # creation du layout |
| 84 | my_circuit.View() # pour afficher le layout |
| 85 | my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap |
| 86 | |
| 87 | |
| 88 | Reprenez le chier amd2901_dpt.py. Pour l'instant, ce chier ne comporte qu'une |
| 89 | description de la netlist. Cela vous a permis de générer une description structurelle |
| 90 | sous la forme d'un chier .vst. Il s'agit maintenant de placer explicitement les colonnes. |
| 91 | Le placement des colonnes du chemin de données ne doit pas être |
| 92 | fait au hasard. La faisabilité et la qualité du routage en dépendent ! |
| 93 | Aidez-vous du manuel de STRATUS : |
| 94 | ~le :///asim/coriolis/share/doc/en/html/stratus/index.html |
| 95 | Utilisez STRATUS pour générer le tout : |
| 96 | > ./execute_amd2901_dpt.py |
| 97 | La gure 13 résume le processus suivi et la gure 14 montre une vue du résultat. |
| 98 | |
| 99 | |
| 100 | 4.5 Travail sur le coeur : Préplacement des structures régulières |
| 101 | Prenez le chier amd2901_core.py et effectuez les étapes suivantes dans la méthode |
| 102 | Layout : |
| 103 | Placer le chemin de données : fonction Place () |
| 104 | Agrandir la boite d'aboutement du coeur : fonction ResizeAb () |
| 105 | Placer les rails de rappels d'alimentation dans le coeur : fonctions AlimVerticalRail |
| 106 | () et AlimHorizontalRail () |
| 107 | Placer les connecteurs du coeur : fonction AlimConnectors () |
| 108 | ATTENTION : La logique "irrégulière" constituant la partie contrôle n'a pas besoin |
| 109 | d'être placée explicitement. Cela sera fait automatiquement par la suite ! |
| 110 | Vériez le résultat : |
| 111 | > ./execute_amd2901_core.py |
| 112 | 4.6 Travail sur le cicuit complet |
| 113 | Prenez le chier amd2901_chip.py et complétez la méthode Layout. |
| 114 | 4.6.1 Placement de la couronne de plots et du coeur |
| 115 | Dans le chier amd2901_chip.py fourni, les plots sont instanciés dans la méthode |
| 116 | Netlist : |
| 117 | def Netlist ( self ) : |
| 118 | ... |
| 119 | Inst ( "pck_px", "p_ck" |
| 120 | , map = { ’pad’ : self.ck |
| 121 | , ’ck’ : cki |
| 122 | , ’vddi’ : self.vdd |
| 123 | , ’vssi’ : self.vss |
| 124 | , ’vdde’ : self.vdde |
| 125 | , ’vsse’ : self.vsse |
| 126 | } |
| 127 | ) |
| 128 | Il vous faut donc, dans la méthode Layout : |
| 129 | |
| 130 | |
| 131 | Dénir la taille de la boîte d'aboutement globale du circuit de façon à ce que |
| 132 | les plots puissent être placés à la périphérie : fonction DefAb () (Commencer par |
| 133 | dénir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la |
| 134 | diminuer) |
| 135 | Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction |
| 136 | PlaceCentric () |
| 137 | Dénir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se |
| 138 | fait à l'aide des 4 fonctions : PadNorth (), PadSouth (), PadEast () et PadWest (). |
| 139 | Vériez le résultat : |
| 140 | > ./execute_amd2901_chip.py |
| 141 | 4.6.2 Routage des alimentations |
| 142 | Vous devez utiliser la fonction PowerRing () pour créer la grille d'alimentation. |
| 143 | Vériez le résultat : |
| 144 | > ./execute_amd2901_chip.py |
| 145 | FIG. 16 Zoom sur le placement des plots et les courrones d'alimentations |
| 146 | 4.6.3 Placement de la logique irrégulière |
| 147 | C'est le placeur Mistral qui se charge de placer les cellules de la partie de contrôle. |
| 148 | Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en |
| 149 | utilisant les zones "vides". Pour appeler le placeur Mistral, vous devez faire appel à la |
| 150 | fonction PlaceGlue (). |
| 151 | |
| 152 | |
| 153 | Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut |
| 154 | que les plots soient placés. L'outil de placement du ot CORIOLIS place les cellules |
| 155 | en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà |
| 156 | placées. |
| 157 | Vériez le résultat : |
| 158 | > ./execute_amd2901_chip.py |
| 159 | |
| 160 | |
| 161 | Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue |
| 162 | le placement automatique de cellules de bourrage. |
| 163 | |
| 164 | Vériez le résultat : |
| 165 | > ./execute_amd2901_chip.py |
| 166 | |
| 167 | |
| 168 | 4.6.4 Routage des signaux d'horloge |
| 169 | Vous devez utiliser la fonction RouteCk () qui route le signal d'horloge. |
| 170 | Vériez le résultat : |
| 171 | > ./execute_amd2901_chip.py |
| 172 | FIG. 20 Zoom sur le routage d'horloge |
| 173 | |
| 174 | |
| 175 | 4.6.5 Routage des signaux logiques |
| 176 | Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux |
| 177 | d'alimentation en utilisant NERO de la manière suivante : |
| 178 | > nero -V -p amd2901_chip amd2901_chip amd2901_chip_r |
| 179 | L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le |
| 180 | troisième argument est la netlist du chip, le quatrième est le chier résultat. |
| 181 | NOTA BENE : La variable MBK_CATA_LIB ne doit contenir qu'une seule fois les |
| 182 | chemins d'accès aux bibliothèques. |
| 183 | 4.6.6 Validation du chip |
| 184 | On validera le travail de NERO avec les outils druc, cougar et lvx. |
| 185 | > druc amd2901_chip_r |
| 186 | > export MBK_OUT_LO=al |
| 187 | > cougar -f amd2901_chip_r |
| 188 | > lvx vst al amd2901_chip amd2901_chip_r -f |
| 189 | Simulez à nouveau la netlist extraite avec ASIMUT. Précisez le format de la netlist |
| 190 | dans la variable d'entrée MBK_IN_LO avant la simulation. |
| 191 | > export MBK_IN_LO=al |
| 192 | Faites attention au chier CATAL! |
| 193 | Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau |
| 194 | transistor : |
| 195 | > cougar -v -t amd2901_chip_r amd2901_chip_r_t |
| 196 | 5 Conclusion |
| 197 | Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception |
| 198 | "back-end" et la validation d'un circuit réalisé en cellules précaractérisées avec préplacement |
| 199 | des parties régulières. |
| 200 | Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000. |
| 201 | Le compte-rendu du TP doit comporter : |
| 202 | Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez |
| 203 | libre accès à vos répertoires en lecture !). |
| 204 | Une description exacte de la méthodologie employée, incluant les éventuels probl |
| 205 | èmes rencontrés. |
| 206 | Pour la conception de cellules sous graal, expliquez vos choix (pourquoi avoir |
| 207 | placé un via ici plutôt que là...), quelle est la taille de vos cellules, quelles sont |
| 208 | les performances probables, quelles améliorations envisagez-vous... Des captures |
| 209 | d'écrans sont les bienvenues (dans la mesure du possible). |
| 210 | Pour l'amd2901, décrivez le ot de conception. Quels choix avez-vous retenus |
| 211 | pour le placement des colonnes du chemin de données, votre circuit est-il limité |
| 212 | par les plots ou par la taille du cur (pad limited ou core limited)... Quels |
| 213 | sont les résultats donnés par lvx... Les schémas sont appréciés. |
| 214 | Les Makeles du ot total. ( Les Makeles seront testés à la n de ce TP3) |
| 215 | NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES). |
| 216 | Merci et bon courage ! |
| 217 | |
| 218 | |