| 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 |
| 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 : |
| 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 | | |
| | 53 | Différentes étapes de conception peuvent être amenées à être ré-étudiées ; le placement choisi pour le chemin de données entre autres ... |