TP4 : Placement/Routage
1 Préplacement des structures régulières
Introduisez les étapes suivantes dans la méthode Layout du fichier mips_r3000_1m_core.py décrivant le coeur du mips :
- Placez le chemin de données aux coordonnées (0, 0) : fonction Place().
- Agrandissez la boite d'aboutement du coeur : fonction ResizeAb(). Cette étape est utile pour réserver la place nécessaire aux cellules de la partie contrôle qui seront placées de façon automatique par la suite. Vous pouvez par exemple dans un premier temps doubler sa hauteur et modifier votre choix une fois que vous aurez visualisé la partie contrôle placée.
- Placez les rails de rappels d'alimentation dans le coeur : fonctions AlimVerticalRail() et AlimHorizontalRail().
- Placez les connecteurs du coeur : fonction AlimConnectors().
- Modifiez l'appel à la fonction Generate dans le chip de façon à générer la vue physique du coeur.
- Faites appel à la méthode View pour visualiser le résultat.
2 Placement du coeur et de la couronne de plots
Introduisez les étapes suivantes dans la méthode Layout du fichier mips_r3000_1m_chip.py décrivant le mips :
- Définissez la taille de la boîte d'aboutement globale du circuit de façon à ce que les plots puissent être placés à la périphérie : fonction DefAb(). Vous pouvez commencer par définir une boite d'aboutement de 8000 par 8000 et essayer ensuite de la réduire.
- Placez le coeur du circuit au centre de la boîte d'aboutement du chip : fonction PlaceCentric().
- Définissez sur quelle face et dans quel ordre placer les plots, cela se fait à l'aide des 4 fonctions : PadNorth(), PadSouth(), PadEast() et PadWest(). Les plots devront être placés en regard des cellules auxquelles ils sont connectés.
- Visualisez le résultat.
3 Routage des alimentations
- Créez la grille d'alimentation : fonction PowerRing().
- Visualisez le résultat.
4 Placement de la logique irrégulière
C'est le placeur mistral de la chaîne Coriolis qui se charge de placer automatiquement les cellules non encore placées. Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en utilisant les zones "vides". Dans votre cas, seules les cellules de la partie contrôle restent à placer.
- Appelez le placeur mistral : fonction PlaceGlue (). Pour pouvoir placer automatiquement la logique "irrégulière", il faut avoir préalablement défini la position des plots d'entrée/sortie sur les 4 faces du circuit car l'outil de placement automatique place les cellules non placées en se basant sur les attirances vers les cellules déjà placées ET vers les plots.
- Une option existe pour la fonction de placement automatique qui permet d'obtenir un placement plus optimisé de la partie contrôle (algorithme plus optimisé et donc ... plut lent), il vous suffit de rajouter greedy = False lors de l'appel de la fonction PlaceGlue().
- Visualisez le résultat.
- Effectuez le placement automatique de cellules de bourrage : fonction FillCell().
- Visualisez le résultat.
5 Routage des signaux d'horloge
- Construisez le réseau maillé correspondant au signal d'horloge interne : fonction RouteCk().
- Visualisez le résultat.
6 Routage des signaux logiques
Le routeur automatique de la chaîne Coriolis n'étant pas encore opérationnel, vous devez utiliser nero, le routeur d' Alliance. Pour effectuer le routage de tous les signaux autres que le signal d'horloge et les signaux d'alimentation, il faut lancer nero de la manière suivante :
> nero -V mips_r3000_1m_chip mips_r3000_chip_r
- Les options -2, -3, -4, -5, -6 peuvent être utiles pour indiquer le nombre de couches d'alu utilisées pour le routage (-4 par défaut).
7 Validation
- Validez le routage en utilisant les les outils druc, cougar et lvx. L'appel à cougar effectue une extraction au niveau catalogue.
> druc mips_r3000_1m_chip_r > export MBK_OUT_LO=al > cougar -f mips_r3000_1m_chip_r > lvx vst al mips_r3000_1m_chip mips_r3000_1m_chip_r -f
- Resimulez la netlist extraite avec asimut.
Précisez le format de la netlist dans la variable d'entrée MBK_IN_LO avant la simulation.
> export MBK_IN_LO=al
8 Analyse temporelle
8.1 Extraction
Pour pouvoir utiliser TAS, il vous faire faire une nouvelle extraction avec cougar, cette fois si au niveau transistor (cette extraction vous permet également de connaitre le nombre de transistors de votre circuit). Cette extraction nécessite de cibler une technologie réelle, il faut donc initaliser la variable d'environnement RDS_TECHNO_NAME :
> export RDS_TECHNO_NAME=/users/soft/techno/labo/035/extract/prol035.rds > export MBK_OUT_LO=al > cougar -t mips_r3000_1m_chip_r mips_r3000_1m_chip_r_t
8.2 Chaines longues
TAS est un analyseur temporel. Il permet d'obtenir les temps de propagation minimaux et maximaux entre les points de référence (c'est à dire les connecteurs externes et les points mémorisants) d'un circuit. TAS travaille sans stimuli, c'est pourquoi il donne des délais pire-cas pour les chaînes longues.
L'environnement doit être correctement initialisé de façon à pouvoir utiliser TAS :
- Initialisez la variable d'environnement ELP_TECHNO_NAME :
export ELP_TECHNO_NAME=/users/soft/techno/labo/035/elp/prol035.elp
- Précisez le format d'entrée (.al) dans la variable d'environnement MBK_IN_LO.
- Mettez en place l'environnement pour l'analyse de timing :
source avt_env.sh
- Il suffit ensuite de l'ancer l'outil TAS :
tas -t am2901_chip_r_t
- Consulter le man de TAS et essayer les différentes options pour comprendre le fonctionnement de TAS.
- Utiliser XTAS qui permet d'interpréter les résultats de TAS.
Disposant lui aussi d'un man, XTAS est agrémenté d'une aide en ligne.
xtas
XTAS vous permet de visualiser les chaines longues entre les points de référence du circuit et leur temps (entrées, registres, sorties).