21 | | Il est par exemple possible d'exploiter la régularité des opérateurs du chemin de données |
22 | | pour imposer un placement en colonnes : tous les bits d'un même opérateur sont placés |
23 | | en colonne, et il est possible d'imposer un placement relatifn des colonnes les unes par |
24 | | rapport aux autres. |
25 | | On va également définir le placement des plots d'entrée/sortie sur la périphérie du circuit. |
26 | | |
27 | | Par ailleurs, on va également utiliser '''stratus''' pour effectuer le routage de certains signaux |
28 | | particuliers comme les alimentations VSS et VDD. |
29 | | |
30 | | Le routage final sera effectué par l'outil '''nero'''. |
31 | | |
32 | | Vous utiliserez aussi '''cougar''' pour obtenir une net list extraite, et '''lvx''', pour |
33 | | comparer la ''net-list'' extraite à la ''net-list'' initiale. |
34 | | |
35 | | Vous utiliserez conjointement les cellules de la bibliothèque '''SXLIB''', |
36 | | et les macro-cellules génériques de la bibliothèque '''DP_SXLIB'''. |
37 | | |
38 | | = 2 Variables d'environnement = |
39 | | |
40 | | Vous devez positionner les variables d'environnement suivantes : |
41 | | |
| 20 | * Donner comme fichier technologie gràce à la variable d'environnement |
60 | | NB : Ces variables d'environnement sont positionnées par défaut, mais il est |
61 | | utile de les vérifier. |
62 | | |
63 | | D'une manière générale, les fichiers décrivant une ''net-list'' logique doivent porter le |
64 | | même nom que le fichier correspondant décrivant la vue physique. |
65 | | |
66 | | C'est à dire que le fichier am2901_dpt.vst (vue logique) doit correspondre au fichier am2901_dpt.ap |
67 | | (vue physique). Il en va de même pour am2901_core. |
68 | | |
69 | | = 3 Fonctions de placement fournies par STRATUS = |
70 | | |
71 | | Pour définir les directives de placement, le langage '''stratus''' fournit les fonctions' suivantes : |
72 | | * Place() |
73 | | * !PlaceRight(), !PlaceTop(), !PlaceLeft(), !PlaceBottom() |
74 | | * !SetRefIns() |
75 | | * !DefAb(), !ResizeAb() |
76 | | |
77 | | Vous pouvez consulter le manuel de STRATUS en ligne : |
78 | | |
79 | | https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/stratus/index.html |
80 | | |
81 | | |
82 | | Toutes ces fonctions doivent être utilisées dans la méthode ''Layout'' associée au bloc considéré. |
83 | | A titre d'exemple, on donne le code suivant pour le fichier circuit.py : |
| 24 | * Préciser le format d'entrée ('''.al''') dans la variable d'environnement MBK_IN_LO. |
| 25 | * Mettre en place l'environnement pour l'analyse de timing : |
136 | | |
137 | | * Placer les rails de rappels d'alimentation dans le coeur : |
138 | | fonctions !AlimVerticalRail () et !AlimHorizontalRail () |
139 | | |
140 | | * Placer les connecteurs du coeur : fonction !AlimConnectors () |
141 | | |
142 | | * Vérifier le résultat : |
143 | | {{{ |
144 | | > ./execute_am2901_core.py |
145 | | }}} |
146 | | |
147 | | = 6 Placement de la couronne de plots autour du coeur = |
148 | | |
149 | | Reprenez le fichier ''am2901_chip.py'' du TP4 (circuit complet avec les plots), et ajoutez une méthode Layout |
150 | | comme indiqué ci-dessous. |
151 | | (Si le fichier que vous avez écrit n'a pas pu être validé pendant le TP4, vous pouvez utiliser |
152 | | le fichier attaché ci-dessous). |
153 | | |
154 | | Il faut compléter ce fichier, en ajoutant les directives suivantes dans la méthode Layout : |
155 | | |
156 | | * Définir la taille de la boîte d'aboutement globale du circuit de façon à ce que |
157 | | les plots puissent être placés à la périphérie : fonction !DefAb () (On peut commencer par |
158 | | définir une boite d'aboutement de 4000 par 4000 et essayer ensuite de la réduire) |
159 | | |
160 | | * Placer le coeur du circuit au centre de la boîte d'aboutement du chip : fonction |
161 | | !PlaceCentric () |
162 | | |
163 | | * Définir sur quelle face et dans quel ordre vous souhaitez placer les plots. Cela se |
164 | | fait à l'aide des 4 fonctions : !PadNorth (), !PadSouth (), !PadEast () et !PadWest (). |
165 | | |
166 | | * Vérifier le résultat : |
167 | | {{{ |
168 | | > ./execute_amd2901_chip.py |
169 | | }}} |
170 | | |
171 | | = 7 Routage des alimentations = |
172 | | |
173 | | Vous devez utiliser la fonction !PowerRing () pour créer la grille d'alimentation, et |
174 | | Vérifier le résultat : |
175 | | {{{ |
176 | | > ./execute_amd2901_chip.py |
177 | | }}} |
178 | | |
179 | | |
180 | | = 8 Placement de la logique irrégulière = |
181 | | |
182 | | C'est le placeur '''mistral''' qui se charge de placer automatiquement les cellules non encore placées. |
183 | | Il détecte quelles sont les cellules qui n'ont pas été placées et complète le placement en |
184 | | utilisant les zones "vides". Pour appeler le placeur '''mistral''', vous devez faire appel à la |
185 | | fonction ''!PlaceGlue ()'' |
186 | | |
187 | | [[Image(zoomPlaceGlue.jpg,nolink)]] |
188 | | |
189 | | Attention : Pour pouvoir placer automatiquement la logique "irrégulière", il faut |
190 | | avoir préalablement défini la position des plots d'entrée/sortie sur les 4 faces du circuit. |
191 | | L'outil de placement automatique place les cellules non placées en se basant sur les attirances |
192 | | vers les plots ainsi que vers les cellules déjà placées. |
193 | | |
194 | | Vérifiez le résultat : |
195 | | {{{ |
196 | | > ./execute_amd2901_chip.py |
197 | | }}} |
198 | | |
199 | | Le placement automatique se termine par l'appel à la fonction !FillCell () qui effectue |
200 | | le placement automatique de cellules de bourrage. |
201 | | [[Image(zoomFillCell.jpg,nolink)]] |
202 | | |
203 | | Vérifiez le résultat : |
204 | | |
205 | | {{{ |
206 | | > ./execute_amd2901_chip.py |
207 | | }}} |
208 | | |
209 | | = 9 Routage des signaux d'horloge = |
210 | | |
211 | | Vous devez utiliser la fonction !RouteCk () qui construit le réseau maillé |
212 | | correspondant au signal d'horloge interne, |
213 | | |
214 | | Vérifiez le résultat : |
215 | | {{{ |
216 | | > ./execute_amd2901_chip.py |
217 | | }}} |
218 | | |
219 | | [[Image(zoomCk.jpg,nolink)]] |
220 | | |
221 | | = 10 Routage des signaux logiques = |
222 | | |
223 | | L'appel au routeur automatique '''nero''' n'est pas encore intégré dans le langage '''stratus'''. |
224 | | Pour effectuer le routage de tous les signaux autres que le signal d'horloge et les signaux |
225 | | d'alimentation, il faut lancer '''nero''' de la manière suivante : |
226 | | {{{ |
227 | | > nero -V -p amd2901_chip amd2901_chip amd2901_chip_r |
228 | | }}} |
229 | | |
230 | | L'option -p indique que vous fournissez un fichier de placement en argument. Le |
231 | | deuxième argument est le fichier définissant la ''net-list'', le troisième est le |
232 | | nom du fichier résultat. |
233 | | |
234 | | = 11 Validation = |
235 | | |
236 | | |
237 | | * On validera le routage en utilisant les les outils '''druc''', '''cougar''' et '''lvx''', |
238 | | comme cela a été fait dans le TP7. |
239 | | |
240 | | {{{ |
241 | | > druc amd2901_chip_r |
242 | | > export MBK_OUT_LO=al |
243 | | > cougar -f amd2901_chip_r |
244 | | > lvx vst al amd2901_chip amd2901_chip_r -f |
245 | | }}} |
246 | | |
247 | | * Vous pouvez resimuler la netlist extraite avec '''asimut'''. Précisez le format de la netlist |
248 | | dans la variable d'entrée '''MBK_IN_LO''' avant la simulation. |
249 | | {{{ |
250 | | > export MBK_IN_LO=al |
251 | | }}} |
252 | | |
253 | | * Pour connaitre le nombre de transistors, on peut effectuer une extraction au niveau transistors : |
254 | | {{{ |
255 | | > cougar -v -t amd2901_chip_r amd2901_chip_r_t |
256 | | }}} |
257 | | |
258 | | = 12 Conclusion = |
259 | | |
260 | | Ce TP vous a permis de passer par la plupart des étapes nécessaires à la conception |
261 | | physique d'un circuit réalisé en cellules précaractérisées avec préplacement |
262 | | des parties régulières. |
263 | | |
264 | | Ces mêmes outils seront utilisés pour laréalisation du processeur MIPS R3000. |
265 | | |
266 | | Le compte-rendu du TP doit comporter : |
267 | | |
268 | | Vos logins, vos noms et prénoms, et vos répertoires de travail pour ce TP (laissez |
269 | | libre accès à vos répertoires en lecture !). |
270 | | |
271 | | Décrivez précisément le flot de conception. Quels choix avez-vous retenus |
272 | | pour le placement des colonnes du chemin de données, votre circuit est-il limité |
273 | | par les plots ou par la taille du coeur (pad limited ou core limited)... Quels |
274 | | sont les résultats donnés par lvx... Les schémas sont appréciés. |
275 | | |
276 | | Fournissez es Makefiles du flot total. ( Les Makefiles seront testés à la fin de ce TP) |
277 | | NE PAS JOINDRE DE LISTINGS DE FICHIERS AUTRES QUE LES MAKEFILES. |
278 | | |
279 | | |
280 | | |
| 53 | Différentes étapes de conception peuvent être amenées à être ré-étudiées ; le placement choisi pour le chemin de données entre autres ... |