| 6 | = 1 Outils utilisés = |
| 7 | Vous allez utiliser les outils de placement flot Coriolis et le routeur d'Alliance, ainsi |
| 8 | que tous les outils de vérification vus dans le TP précédnt. |
| 9 | Vous utiliserez aussi lvx, le comparateur de netlists. Lorsque le système est trop complexe |
| 10 | il est difficile d'utiliser proof, le comparateur formel (calculs trop long). On utilise |
| 11 | alors une comparaison de netlists. Essayez les deux méthodes (proof et lvx). |
| 12 | = 2 Environnement technologique = |
| 13 | Outre l'environnement technologique de la première partie du TP, vous devez positionner |
| 14 | : |
| 15 | {{{ |
| 16 | > export VH_MAXERR=10 |
| 17 | > export MBK_WORK_LIB=. |
| 18 | > export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib |
| 19 | > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/dp_sxlib |
| 20 | > export MBK_CATA_LIB=$MBK_CATA_LIB :$ALLIANCE_TOP/cells/pxlib |
| 21 | > export MBK_CATA_LIB=$MBK_CATA_LIB :. |
| 22 | > export MBK_CATAL_NAME=CATAL |
| 23 | > export MBK_IN_LO=vst |
| 24 | > export MBK_OUT_LO=vst |
| 25 | > export MBK_IN_PH=ap |
| 26 | > export MBK_OUT_PH=ap |
| 27 | > export CRL_OUT_LO=vst |
| 28 | > export CRL_OUT_PH=ap |
| 29 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages/stratus |
| 30 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH |
| 31 | > export PYTHONPATH=/asim/coriolis/lib/python2.3/site-packages :$PYTHONPATH |
| 32 | }}} |
| 33 | NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être |
| 34 | utile de les vérifier. |
| 35 | = 3 Précautions quant au nommage des fichiers = |
| 36 | D'une manière générale, les fichiers décrivant une netlist logique doivent porter le |
| 37 | même nom que le fichier correspondant décrivant la vue physique. C'est à dire que |
| 38 | le fichier amd2901_dpt.vst (vue logique) doit correspondre au fichier amd2901_dpt.ap |
| 39 | (vue physique). Il en va de même pour le fichier amd2901_core. |
| 40 | = 4 Travail sur le chemin de données : Préplacement des opérateurs = |
| 41 | Le TP précédent vous a permis de décrire la netlist hiérarchique du chemin de donn |
| 42 | ées. Vous allez maintenant placer les colonnes du chemin de données de manière à |
| 43 | profiter de la régularité du chemin de données. |
| 44 | Pour réaliser votre placement des opérateurs, vous disposez des fonctions de STRATUS |
| 45 | suivantes : |
| 46 | * !Place() |
| 47 | * !PlaceRight(), !PlaceTop(), !PlaceLeft(), !PlaceBottom() |
| 48 | * !SetRefIns() |
| 49 | * !DefAb(), !ResizeAb() |
| 50 | Toutes ces fonctions doivent être utilisées dans la méthode Layout. |
| 51 | Reprenons l'exemple du TP précédent, on donne le code suivant pour le fichier circuit.py : |
| 52 | {{{ |
| 53 | #!/usr/bin/env python |
| 54 | from stratus import * |
| 55 | # definition de la cellule |
| 56 | class circuit ( Model ): |
| 57 | ... |
| 58 | def Layout ( self ): |
| 59 | Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) ) |
| 60 | PlaceRight ( self.instance_or2_4bits, NOSYM ) |
| 61 | PlaceRight ( self.instance_add2_4bits, NOSYM ) |
| 62 | }}} |
| 63 | Ensuite pour le fichier test_circuit.py, il faut rajouter l'appel à la méthode Layout : |
| 64 | {{{ |
| 65 | #!/usr/bin/env python |
| 66 | from stratus import * |
| 67 | from circuit import circuit |
| 68 | my_circuit = circuit ( "mon_circuit" ) # creation du circuit |
| 69 | my_circuit.Interface() # creation de l’interface |
| 70 | my_circuit.Netlist() # creation de la netlist |
| 71 | my_circuit.Layout() # creation du layout |
| 72 | my_circuit.View() # pour afficher le layout |
| 73 | my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap |
| 74 | }}} |
| 75 | |
| 76 | Reprenez le fichier amd2901_dpt.py. Pour l'instant, ce fichier ne comporte qu'une |
| 77 | description de la netlist. Cela vous a permis de générer une description structurelle |
| 78 | sous la forme d'un fichier .vst. Il s'agit maintenant de placer explicitement les colonnes. |
| 79 | '''Le placement des colonnes du chemin de données ne doit pas être |
| 80 | fait au hasard. La faisabilité et la qualité du routage en dépendent !''' |
| 81 | Aidez-vous du manuel de STRATUS : |
| 82 | ''~file :///asim/coriolis/share/doc/en/html/stratus/index.html'' |
| 83 | Utilisez STRATUS pour générer le tout : |
| 84 | {{{ |
| 85 | > ./execute_amd2901_dpt.py |
| 86 | }}} |
| 87 | |