}}}
[[PageOutline]]
= 1 Schéma du chemin de données =
* Etant donné le fichier de description en vbe du chemin de données fourni lors du TP précédent et des cours présentés, vous devez créer le fichier de description du chemin de données en Stratus :
* Vous avez à disposition un [attachment:mips_r3000_1m_dp.py fichier squelette à compléter]. Ce fichier est à mettre dans le répertoire ''design'' ; le fichier ''.vst'' qui sera obtenu ''remplacera'' le ''.vbe'' que vous aviez à disposition.
* Suivez bien les indications du fichier ''.vbe'' (utilisation de tri-states, de mux à deux entrées ...)
* Vous avez à disposition tous les générateurs de la bibliothèque '''Dpgen''', consultez la documentation fournie : http://www-asim.lip6.fr/recherche/coriolis/doc/en/html/dpgen/index.html. (Note : Pour le banc de registre, vous pouvez utiliser les générateurs sans décodeur d'adresse DPGENRF2 ou DPGENRF2R0 non documentés)
* Les générateurs sont utilisables comme suit :
{{{
# Génération avec les paramètres voulus
Generate ( 'DpgenRf2', 'rf2_4_16'
, param = { 'nbit' : 4, 'nword' : 16 } )
# Instanciation avec la connectique voulue
self.I = Inst ( 'rf2_4_16', 'inst'
, map = { 'ck' : self.ck
, 'sel' : self.sel
, 'sela' : self.sela
, 'selb' : self.selb
, 'selw' : self.selw
, 'datain0' : self.datain0
, 'datain1' : self.datain1
, 'dataouta' : self.dataouta
, 'dataoutb' : self.sataoutb
, 'vdd' : self.vdd
, 'vss' : self.vss
}
)
}}}
* Même si le langage offre d'autres possibilités, vous devez dans le cadre de cette UE uniquement utiliser la fonction '''Inst''' pour effectuer les instanciations de cellules ; de plus, même si cela n'est pas obligatoire dans le langage, donnez toujours un nom à L'instance créée en utilisant un attibut de classe (i.e. écrivez '''self.instance = Inst (...)''' et non pas '''instance = Inst (...)''' ou '''Inst (...)''' tout court), cela vous sera utile lors du placement. Donnez des noms les plus significatifs possibles !
* Une fois un fichier ''.vst'' obtenu, modifier le script de test fourni de façon à tester ce fichier.
= 2 Placement du chemin de données =
L'intérêt de décrire le chemin de données à la main en '''Stratus''' et d'utiliser la bibliothèque '''Dpgen''' est de profiter de la régularité des cellules. Vous devez ici effectuer le placement à la main des différents générateurs '''Dpgen''' que vous avez instancié.
* Créez une méthode '''Layout''' dans la description '''Stratus''' du chemin de données.
* Placez avec les directives fournies par '''Stratus''' ('''Place()''', '''!PlaceRight()''', ....) toutes les colonnes qui ont été instanciées dans la netlist. Vous devez bien réfléchir à votre placement, le routage en dépendra ! N'hésitez pas à faire des schémas pour représenter les connections entre colonnes et placez à proximité les colonnes ayant un grand nombre d'interconnexions communes.
* De façon à avoir une idée de la qualité de votre placement, vous pouvez lancer le script python createCongestion.py inclu dans Stratus, comme suit :
{{{
> createCongestion.py mips_r3000_1m_dp
}}}
Cela peut être fait sur chacun des fichiers représentant le circuit, du moment que les fichiers ''.vst'' et ''.ap'' (avant routage) existent. L'image obtenue permet d'évaluer la congestion (i.e. les endroits susceptibles de poser problème lors du routage) : noir = pas de congestion, rouge = un peu de congestion, jaune / blanc : beaucoup de congestion ...
* Ajoutez l'appel à la méthode '''Layout''' dans le script servant à créer le chemin de données et ajoutez l'argument '''PHYSICAL''' à l'appel de la méthode '''Save''' dans ce même fichier. Lorsque vous lancez ce script, vous obtenez normalement un fichier ''.ap'' en plus du fichier ''.vst'' décrivant la netlist. Vous pouvez visualiser ce fichier avec '''graal'''.