Changes between Version 9 and Version 10 of ToolsTp4
- Timestamp:
- Jan 13, 2010, 1:18:03 PM (15 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ToolsTp4
v9 v10 76 76 [[Image(preplacement.jpg,nolink)]] 77 77 78 * L'app lerà la méthode ''View'' dans le script python permet de visualiser le placement du chemin de données. Vous pouvez également visualiser ce placement en utilisant '''graal'''.78 * L'appel à la méthode ''View'' dans le script python permet de visualiser le placement du chemin de données. Vous pouvez également visualiser ce placement en utilisant '''graal'''. 79 79 * Etudiez le placement choisi : vérifiez entre autres que les colonnes ayant un grand nombre d'interconnexions communes sont ''proches''. 80 80 … … 83 83 == 3.1 Préplacement des structures régulières == 84 84 85 Introduire les étapes suivantes dans la méthode ''Layout'' du fichier ''am2901_core.py'' décrivant le coeur du circuit AM2091 : 86 * Placer le chemin de données : fonction ''Place()''. 87 * Agrandir la boite d'aboutement du coeur : fonction ''!ResizeAb()''. 88 (Cette étape est utile pour réserver la place nécessaire au placement des cellules de la partie contrôle. 89 La logique "irrégulière" constituant la partie contrôle n'a pas besoin d'être placée explicitement. Cela sera fait automatiquement par la suite !) 90 * Placer les rails de rappels d'alimentation dans le coeur : fonctions ''!AlimVerticalRail()'' et ''!AlimHorizontalRail()''. 91 * Placer les connecteurs du coeur : fonction ''!AlimConnectors()''. 92 * Modifier l'appel à la fonction ''Generate'' dans le chip de façon à générer la vue physique du coeur. 93 * Faire appel à la méthode ''View'' pour visualiser. 85 Introduisez les étapes suivantes dans la méthode ''Layout'' du fichier ''am2901_core.py'' décrivant le coeur du circuit AM2091 : 86 87 * Placez le chemin de données aux coordonnées (0, 0) : fonction ''Place()''. 88 * 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. 89 * Placez les rails de rappels d'alimentation dans le coeur : fonctions ''!AlimVerticalRail()'' et ''!AlimHorizontalRail()''. 90 * Placez les connecteurs du coeur : fonction ''!AlimConnectors()''. 91 * Modifiez l'appel à la fonction ''Generate'' dans le chip de façon à générer la vue physique du coeur. 92 * Faites appel à la méthode ''View'' pour visualiser le résultat. 94 93 95 94 == 3.2 Placement du coeur et de la couronne de plots == 96 95 97 Dans le fichier ''amd2901_chip.py'' fourni, les plots sont instanciés dans la méthode ''Netlist''. 98 Il vous faut donc : 96 Introduisez les étapes suivantes dans la méthode ''Layout'' du fichier ''am201çchip.py'' décrivant le circuit AM2901 : 99 97 100 * Définir 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()''. 101 (On peut commencer par définir une boite d'aboutement de 4000 par 4000 et essayer ensuite de la réduire) 102 * Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction ''!PlaceCentric()''. 103 * Définir sur quelle face et dans quel ordre placer les plots, cela se fait à l'aide des 4 fonctions : ''!PadNorth()'', ''!PadSouth()'', ''!PadEast()'' et ''!PadWest()''. 104 * Visualiser le résultat. 98 * 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 5000 par 5000 et essayer ensuite de la réduire. 99 * Placez le coeur du circuit au centre de la boîte d'aboutement du chip : fonction ''!PlaceCentric()''. 100 * 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. 101 * Visualisez le résultat. 105 102 106 103 == 3.3 Routage des alimentations == … … 111 108 == 3.4 Placement de la logique irrégulière == 112 109 113 C'est le placeur '''mistral''' qui se charge de placer automatiquement les cellules non encore placées.110 C'est le placeur '''mistral''' de la chaîne '''Coriolis''' qui se charge de placer automatiquement les cellules non encore placées. 114 111 Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en utilisant les zones "vides". 112 Dans votre cas, seules les cellules de la partie contrôle restent à placer. 115 113 116 114 [[Image(placement.jpg,nolink)]] 117 115 118 * Appelez le placeur '''mistral''' : fonction ''!PlaceGlue ()''.. 119 (Attention : 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. L'outil de placement automatique place les cellules non placées en se basant sur les attirances vers les plots ainsi que vers les cellules déjà placées.) 116 * 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. 120 117 * Visualisez le résultat. 121 118 * Effectuez le placement automatique de cellules de bourrage : fonction ''!FillCell()''. … … 129 126 == 3.6 Routage des signaux logiques == 130 127 131 L 'appel au routeur automatique '''nero''' n'est pas encore intégré dans le langage '''Stratus'''.128 Le routeur automatique de la chaîne '''Coriolis''' n'étant pas encore opérationnel, vous devez utiliser '''nero''', le routeur d' '''Alliance'''. 132 129 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 : 133 130 {{{