Changes between Initial Version and Version 1 of ToolsCourseTp7


Ignore:
Timestamp:
May 7, 2007, 4:37:43 PM (18 years ago)
Author:
anne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp7

    v1 v1  
     1{{{
     2#!html
     3<h1> TP7 : Placement et routage du circuit AMD2901</h1>
     4}}}
     5[[PageOutline]]
     6Séances 3 et 4 : Placement et Routage du circuit Amd2901
     7Vous 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 (à
     11compléter)
     12– execute_amd2901_dpt.py, description structurelle en STRATUS d'instanciation
     13du chemin de données
     14– pattern.pat, chier de tests
     15– Makele, qui automatise le ot de conception du TP2.
     16Ainsi 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
     20Il faut maintenant enrichir les chiers .py avec les étapes de placement-routage.
     214.1 Outils utilisés
     22Vous allez utiliser les outils de placement ot Coriolis et le routeur d'Alliance, ainsi
     23que tous les outils de vérication vus dans la première partie de ce TP.
     24Vous utiliserez aussi lvx, le comparateur de netlists. Lorsque le système est trop complexe
     25il est difcile d'utiliser proof, le comparateur formel (calculs trop long). On utilise
     26alors une comparaison de netlists. Essayez les deux méthodes (proof et lvx).
     274.2 Environnement technologique
     28Outre 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
     43Master ACSI 13
     44TP3 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
     48NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être
     49utile de les vérier.
     504.3 Précautions quant au nommage des chiers
     51D'une manière générale, les chiers décrivant une netlist logique doivent porter le
     52même nom que le chier correspondant décrivant la vue physique. C'est à dire que
     53le 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.
     554.4 Travail sur le chemin de données : Préplacement des opérateurs
     56Le 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 à
     58proter de la régularité du chemin de données.
     59Pour réaliser votre placement des opérateurs, vous disposez des fonctions de STRATUS
     60suivantes :
     61– Place()
     62– PlaceRight(), PlaceTop(), PlaceLeft(), PlaceBottom()
     63– SetRefIns()
     64– DefAb(), ResizeAb()
     65Toutes ces fonctions doivent être utilisées dans la méthode Layout.
     66Reprenons l'exemple du TP 2, on donne le code suivant pour le chier circuit.py :
     67#!/usr/bin/env python
     68from stratus import *
     69# definition de la cellule
     70class circuit ( Model ):
     71...
     72def Layout ( self ):
     73Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) )
     74PlaceRight ( self.instance_or2_4bits, NOSYM )
     75PlaceRight ( self.instance_add2_4bits, NOSYM )
     76Ensuite pour le chier test_circuit.py, il faut rajouter l'appel à la méthode Layout :
     77#!/usr/bin/env python
     78from stratus import *
     79from circuit import circuit
     80my_circuit = circuit ( "mon_circuit" ) # creation du circuit
     81my_circuit.Interface() # creation de l’interface
     82my_circuit.Netlist() # creation de la netlist
     83my_circuit.Layout() # creation du layout
     84my_circuit.View() # pour afficher le layout
     85my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap
     86
     87
     88Reprenez le chier amd2901_dpt.py. Pour l'instant, ce chier ne comporte qu'une
     89description de la netlist. Cela vous a permis de générer une description structurelle
     90sous la forme d'un chier .vst. Il s'agit maintenant de placer explicitement les colonnes.
     91Le placement des colonnes du chemin de données ne doit pas être
     92fait au hasard. La faisabilité et la qualité du routage en dépendent !
     93Aidez-vous du manuel de STRATUS :
     94~le :///asim/coriolis/share/doc/en/html/stratus/index.html
     95Utilisez STRATUS pour générer le tout :
     96> ./execute_amd2901_dpt.py
     97La gure 13 résume le processus suivi et la gure 14 montre une vue du résultat.
     98
     99
     1004.5 Travail sur le coeur : Préplacement des structures régulières
     101Prenez le chier amd2901_core.py et effectuez les étapes suivantes dans la méthode
     102Layout :
     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 ()
     108ATTENTION : La logique "irrégulière" constituant la partie contrôle n'a pas besoin
     109d'être placée explicitement. Cela sera fait automatiquement par la suite !
     110Vériez le résultat :
     111> ./execute_amd2901_core.py
     1124.6 Travail sur le cicuit complet
     113Prenez le chier amd2901_chip.py et complétez la méthode Layout.
     1144.6.1 Placement de la couronne de plots et du coeur
     115Dans le chier amd2901_chip.py fourni, les plots sont instanciés dans la méthode
     116Netlist :
     117def Netlist ( self ) :
     118...
     119Inst ( "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)
     128Il 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
     132les plots puissent être placés à la périphérie : fonction DefAb () (Commencer par
     133dénir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la
     134diminuer)
     135– Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
     136PlaceCentric ()
     137– Dénir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se
     138fait à l'aide des 4 fonctions : PadNorth (), PadSouth (), PadEast () et PadWest ().
     139Vériez le résultat :
     140> ./execute_amd2901_chip.py
     1414.6.2 Routage des alimentations
     142Vous devez utiliser la fonction PowerRing () pour créer la grille d'alimentation.
     143Vériez le résultat :
     144> ./execute_amd2901_chip.py
     145FIG. 16 – Zoom sur le placement des plots et les courrones d'alimentations
     1464.6.3 Placement de la logique irrégulière
     147C'est le placeur Mistral qui se charge de placer les cellules de la partie de contrôle.
     148Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
     149utilisant les zones "vides". Pour appeler le placeur Mistral, vous devez faire appel à la
     150fonction PlaceGlue ().
     151
     152
     153Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
     154que les plots soient placés. L'outil de placement du ot CORIOLIS place les cellules
     155en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà
     156placées.
     157Vériez le résultat :
     158> ./execute_amd2901_chip.py
     159
     160
     161Le placement automatique se termine par l'appel à la fonction FillCell () qui effectue
     162le placement automatique de cellules de bourrage.
     163
     164Vériez le résultat :
     165> ./execute_amd2901_chip.py
     166
     167
     1684.6.4 Routage des signaux d'horloge
     169Vous devez utiliser la fonction RouteCk () qui route le signal d'horloge.
     170Vériez le résultat :
     171> ./execute_amd2901_chip.py
     172FIG. 20 – Zoom sur le routage d'horloge
     173
     174
     1754.6.5 Routage des signaux logiques
     176Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux
     177d'alimentation en utilisant NERO de la manière suivante :
     178> nero -V -p amd2901_chip amd2901_chip amd2901_chip_r
     179L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le
     180troisième argument est la netlist du chip, le quatrième est le chier résultat.
     181NOTA BENE : La variable MBK_CATA_LIB ne doit contenir qu'une seule fois les
     182chemins d'accès aux bibliothèques.
     1834.6.6 Validation du chip
     184On 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
     189Simulez à nouveau la netlist extraite avec ASIMUT. Précisez le format de la netlist
     190dans la variable d'entrée MBK_IN_LO avant la simulation.
     191> export MBK_IN_LO=al
     192Faites attention au chier CATAL!
     193Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau
     194transistor :
     195> cougar -v -t amd2901_chip_r amd2901_chip_r_t
     1965 Conclusion
     197Ce 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
     199des parties régulières.
     200Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
     201Le compte-rendu du TP doit comporter :
     202– Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez
     203libre 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
     207placé un via ici plutôt que là...), quelle est la taille de vos cellules, quelles sont
     208les performances probables, quelles améliorations envisagez-vous... Des captures
     209d'écrans sont les bienvenues (dans la mesure du possible).
     210– Pour l'amd2901, décrivez le ot de conception. Quels choix avez-vous retenus
     211pour le placement des colonnes du chemin de données, votre circuit est-il limité
     212par les plots ou par la taille du cœur (“pad limited” ou “core limited”)... Quels
     213sont 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)
     215NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES).
     216Merci et bon courage !
     217
     218