| | 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 | |