Changes between Version 3 and Version 4 of ToolsCourseTp8


Ignore:
Timestamp:
Oct 4, 2007, 4:24:58 PM (17 years ago)
Author:
anne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp8

    v3 v4  
    11
     2{{{
     3#!html
     4<h1> TP8 : Placement et routage du circuit AMD2901</h1>
     5}}}
     6[[PageOutline]]
     7= 1 Outils utilisés =
     8Vous allez utiliser les outils de placement flot Coriolis et le routeur d'Alliance, ainsi
     9que tous les outils de vérification vus dans le TP précédent.
     10Vous utiliserez aussi '''lvx''', le comparateur de netlists.
     11
     12= 2 Environnement technologique =
     13Outre 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=/opt/coriolis/lib/python2.3/site-packages/stratus
     30> export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages/isobar :$PYTHONPATH
     31> export PYTHONPATH=/opt/coriolis/lib/python2.3/site-packages :$PYTHONPATH
     32}}}
     33NB : Ces variables d'environnement sont positionnées par défaut, mais il peut être
     34utile de les vérifier.
     35= 3 Précautions quant au nommage des fichiers =
     36D'une manière générale, les fichiers décrivant une netlist logique doivent porter le
     37même nom que le fichier correspondant décrivant la vue physique.
     38
     39C'est à dire que le fichier amd2901_dpt.vst (vue logique) doit correspondre au fichier amd2901_dpt.ap
     40(vue physique). Il en va de même pour le fichier amd2901_core.
     41
     42
     43= 4 Travail sur le chemin de données : Préplacement des opérateurs =
     44Le TP précédent vous a permis de décrire la netlist hiérarchique du chemin de donn
     45ées. Vous allez maintenant placer les colonnes du chemin de données de manière à
     46profiter de la régularité du chemin de données.
     47Pour réaliser votre placement des opérateurs, vous disposez des fonctions de ''''STRATUS''''
     48suivantes :
     49 *   Place()
     50 *  !PlaceRight(), !PlaceTop(), !PlaceLeft(), !PlaceBottom()
     51 *  !SetRefIns()
     52 *  !DefAb(), !ResizeAb()
     53
     54Toutes ces fonctions doivent être utilisées dans la méthode Layout.
     55Reprenons l'exemple du TP précédent, on donne le code suivant pour le fichier circuit.py :
     56{{{
     57#!/usr/bin/env python
     58from stratus import *
     59# definition de la cellule
     60class circuit ( Model ):
     61...
     62  def Layout ( self ):
     63    Place ( self.instance_nand2_4bits, NOSYM, XY ( 0, 0 ) )
     64    PlaceRight ( self.instance_or2_4bits, NOSYM )
     65    PlaceRight ( self.instance_add2_4bits, NOSYM )
     66}}}
     67Ensuite pour le fichier test_circuit.py, il faut rajouter l'appel à la méthode Layout :
     68{{{
     69#!/usr/bin/env python
     70from stratus import *
     71from circuit import circuit
     72my_circuit = circuit ( "mon_circuit" ) # creation du circuit
     73my_circuit.Interface() # creation de l’interface
     74my_circuit.Netlist() # creation de la netlist
     75my_circuit.Layout() # creation du layout
     76my_circuit.View() # pour afficher le layout
     77my_circuit.Save ( PHYSICAL ) # sauver les fichiers mon_circuit.vst et mon_circuit.ap
     78}}}
     79
     80Reprenez le fichier amd2901_dpt.py. Pour l'instant, ce fichier ne comporte qu'une
     81description de la netlist. Cela vous a permis de générer une description structurelle
     82sous la forme d'un fichier .vst. Il s'agit maintenant de placer explicitement les colonnes.
     83'''Le placement des colonnes du chemin de données ne doit pas être
     84fait au hasard. La faisabilité et la qualité du routage en dépendent '''
     85
     86Aidez-vous du manuel de STRATUS :
     87
     88https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/stratus/index.html
     89
     90
     91
     92Utilisez STRATUS pour générer le tout :
     93{{{
     94> ./execute_amd2901_dpt.py
     95}}}
     96
     97[[Image(preplacement.jpg,nolink)]]
     98
     99  = 5 Travail sur le coeur : Préplacement des structures régulières =
     100à partir du fichier de description structurelle  [attachment:amd2901_core.py coeur du circuit] que vous avez enrichi
     101de la description des "netlists" de la partie contrôle et de la partie chemin de données, effectuez les étapes suivantes dans la méthode
     102Layout :
     103
     104  * Placer le chemin de données : fonction Place ()
     105 
     106  * Agrandir la boite d'aboutement du coeur : fonction !ResizeAb ()
     107cette étape est utile pour réserver la place pour la partie contrôle
     108
     109  * Placer les rails de rappels d'alimentation dans le coeur :
     110    fonctions !AlimVerticalRail () et !AlimHorizontalRail ()
     111
     112  * Placer les connecteurs du coeur : fonction !AlimConnectors ()
     113
     114
     115'''ATTENTION ''': La logique "irrégulière" constituant la partie contrôle n'a pas besoin
     116 d'être placée explicitement. Cela sera fait automatiquement par la suite !
     117
     118'''Vérifiez le résultat'''
     119{{{
     120> ./execute_amd2901_core.py
     121}}}
     122
     123
     124 = 6 Travail sur le cicuit complet =
     125
     126  Prenez le fichier [attachment:amd2901_chip.py circuit complet avec les plots] et complétez la méthode Layout
     127comme indiqué ci-dessous.
     128
     129== 6.1 Placement de la couronne de plots et du coeur ==
     130
     131 Dans le fichier amd2901_chip.py fourni, les plots sont instanciés dans la méthode
     132Netlist :
     133{{{
     134def Netlist ( self ) :
     135...
     136  Inst ( "pck_px", "p_ck"
     137        , map = { ’pad’ : self.ck
     138                 , ’ck’ : cki
     139                 , ’vddi’ : self.vdd
     140                 , ’vssi’ : self.vss
     141                 , ’vdde’ : self.vdde
     142                 , ’vsse’ : self.vsse
     143                 }
     144
     145       )
     146}}}
     147 Il vous faut donc, dans la méthode Layout :
     148
     149
     150  * Définir la taille de la boîte d'aboutement globale du circuit de façon à ce que
     151les plots puissent être placés à la périphérie : fonction !DefAb () (Commencer par
     152définir une boite d'aboutement de 4000 par 4000 et vous essaierez ensuite de la
     153diminuer)
     154
     155  * Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction
     156  !PlaceCentric ()
     157
     158  * Définir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se
     159 fait à l'aide des 4 fonctions : !PadNorth (), !PadSouth (), !PadEast () et !PadWest ().
     160
     161  * Vérifiez le résultat :
     162{{{
     163> ./execute_amd2901_chip.py
     164}}}
     165
     166== 6.2 Routage des alimentations ==
     167Vous devez utiliser la fonction !PowerRing () pour créer la grille d'alimentation.
     168Vérifiez le résultat :
     169{{{
     170> ./execute_amd2901_chip.py
     171}}}
     172
     173
     174 == 6.3 Placement de la logique irrégulière ==
     175C'est le placeur '''Mistral''' qui se charge de placer les cellules de la partie de contrôle.
     176Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en
     177utilisant les zones "vides". Pour appeler le placeur '''Mistral''', vous devez faire appel à la
     178fonction ''!PlaceGlue ()''
     179
     180[[Image(zoomPlaceGlue.jpg,nolink)]]
     181
     182Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut
     183que les plots soient placés. L'outil de placement du flot CORIOLIS place les cellules
     184en se basant sur les attirances de celles-ci vers les plots ainsi que vers les cellules déjà
     185placées.
     186[[Image(placement.jpg,nolink)]]
     187Vérifiez le résultat :
     188{{{
     189> ./execute_amd2901_chip.py
     190}}}
     191
     192
     193[[Image(rappel.jpg,nolink)]]
     194
     195Le placement automatique se termine par l'appel à la fonction !FillCell () qui effectue
     196le placement automatique de cellules de bourrage.
     197[[Image(zoomFillCell.jpg,nolink)]]
     198
     199Vérifiez le résultat :
     200
     201{{{
     202> ./execute_amd2901_chip.py
     203}}}
     204
     205 == 6.4 Routage des signaux d'horloge ==
     206
     207Vous devez utiliser la fonction !RouteCk () qui route le signal d'horloge.
     208Vérifiez le résultat :
     209{{{
     210> ./execute_amd2901_chip.py
     211}}}
     212
     213[[Image(zoomCk.jpg,nolink)]]
     214
     215 == 6.5 Routage des signaux logiques ==
     216Routez automatiquement tous les signaux autres que le signal d'horloge et les signaux
     217d'alimentation en utilisant NERO de la manière suivante :
     218{{{
     219> nero -V -p amd2901_chip amd2901_chip amd2901_chip_r
     220}}}
     221
     222L'option -p indique que vous transmettez un placement, à savoir celui du chip. Le
     223troisième argument est la netlist du chip, le quatrième est le fichier résultat.
     224
     225
     226NOTA BENE : La variable '''MBK_CATA_LIB''' ne doit contenir qu'une seule fois les
     227chemins d'accès aux bibliothèques.
     228
     229== 6.6 Validation du chip ==
     230
     231 
     232 *  On validera le travail de '''NERO''' avec les outils '''DRUC''', '''COUGAR''' et '''LVX'''.
     233{{{
     234> druc amd2901_chip_r
     235> export MBK_OUT_LO=al
     236> cougar -f amd2901_chip_r
     237> lvx vst al amd2901_chip amd2901_chip_r -f
     238}}}
     239
     240  *  Simulez à nouveau la netlist extraite avec '''ASIMUT'''. Précisez le format de la netlist
     241dans la variable d'entrée '''MBK_IN_LO''' avant la simulation.
     242{{{
     243> export MBK_IN_LO=al
     244}}}
     245
     246 '''Faites attention au fichier CATAL!'''
     247  * Pour connaitre le nombre de transistors, on effectue une extraction du circuit au niveau
     248 transistor :
     249{{{
     250> cougar -v -t amd2901_chip_r amd2901_chip_r_t
     251}}}
     252
     253 = Conclusion =
     254Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception
     255"back-end" et la validation d'un circuit réalisé en cellules précaractérisées avec préplacement
     256des parties régulières.
     257
     258Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000.
     259Le compte-rendu du TP doit comporter :
     260
     261Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez
     262libre accès à vos répertoires en lecture !).
     263Une description exacte de la méthodologie employée, incluant les éventuels probl
     264èmes rencontrés.
     265
     266 
     267Pour l'amd2901, décrivez le flot de conception. Quels choix avez-vous retenus
     268pour le placement des colonnes du chemin de données, votre circuit est-il limité
     269par les plots ou par la taille du coeur (pad limited ou core limited)... Quels
     270sont les résultats donnés par lvx... Les schémas sont appréciés.
     271
     272Les Makeles du flot total. ( Les Makefiles seront testés à la fin de ce TP)
     273NE PAS JOINDRE DE LISTINGS DE FICHIERS (SAUF LES MAKEFILES).
     274Merci et bon courage !
     275
     276