| 1 | {{{ |
| 2 | #!html |
| 3 | <h1> TP2 : Modélisation structurelle avec Stratus </h1> |
| 4 | }}} |
| 5 | [[PageOutline]] |
| 6 | |
| 7 | Dans ce TP, nous souhaitons réaliser un générateur de circuit addaccu amélioré avec comme paramètre, entre autres, le nombre de bits. |
| 8 | |
| 9 | [[Image(addaccu.jpg, nolink)]] |
| 10 | |
| 11 | Le circuit addaccu a deux niveaux de hiérarchie : dans '''addaccu''' sont instanciés trois blocs '''mux''', '''reg''' et '''add'''. |
| 12 | Ces trois blocs sont des générateurs paramétrable de cellules '''sxlib''', décrits dans le langage '''Stratus'''. |
| 13 | |
| 14 | Nous verrons dans ce TP que '''Stratus''' comment permet de décrire des netlists paramétrables. |
| 15 | |
| 16 | = 1 Travail à effectuer = |
| 17 | |
| 18 | == 1.1 Familiarisation avec '''Stratus''' == |
| 19 | |
| 20 | * Récupérer les deux fichiers permettant de créer le bloc '''mux''' et les étudier : |
| 21 | * [attachment:mux.py Netlist en '''Stratus''' du bloc '''mux'''] |
| 22 | * [attachment:genmux.py Script pour la création de la netlist] |
| 23 | |
| 24 | Ce bloc a la fonctionnalité suivante : |
| 25 | {{{ |
| 26 | si (cmd==0) alors s <= i0 sinon s <= i1 |
| 27 | }}} |
| 28 | i0, i1 et s ayant un nombre de bit paramétrable |
| 29 | |
| 30 | * Créer une instance de mux sur 4 bits. |
| 31 | Pour ce faire, il faut exécuter le script fourni avec le bon paramètre, soit en exécutant la commande suivante : |
| 32 | {{{ |
| 33 | > python gen_mux.py -n 2 |
| 34 | }}} |
| 35 | , soit en modifiant les droits du fichier : |
| 36 | {{{ |
| 37 | > chmod u+x gen_mux.py |
| 38 | > ./gen_mux.py -n 2 |
| 39 | }}} |
| 40 | |
| 41 | Si le script s'effectue sans erreur, un fichier '''.vst''' est normalement généré. |
| 42 | Vous pouvez vérifier qu'il décrit bien le circuit voulu. |
| 43 | |
| 44 | == 1.2 Circuit addaccu == |
| 45 | |
| 46 | * Ecrire les blocs '''add''' et '''reg''' avec '''Stratus''' en utilisant exclusivement les cellules de la bibliothèque '''sxlib'''. |
| 47 | Ces deux blocs prennent comme paramètre le nombre de bits. |
| 48 | En outre, ils vérifient que leur paramètre est compris entre 2 et 64 (ce n’est pas fait dans mux). |
| 49 | * Ecrire les deux scripts python permettant de créer les instances de l'additionneur et du registre. |
| 50 | |
| 51 | * Ecrire le circuit '''addaccu''' avec '''Stratus'''. |
| 52 | Ce circuit instancie les trois blocs précédents ('''mux''', '''add''' et '''reg'''). |
| 53 | Le circuit '''addaccu''' prend également comme paramètre le nombre de bits. |
| 54 | * Ecrire le script python permettant de créer des instances de l'addaccu. |
| 55 | |
| 56 | * Ecrire un fichier '''Makefile paramétrable''' permettant de produire chaque composant et le circuit addaccu en choisissant le nombre de bits. |
| 57 | |
| 58 | * Générer le circuit sur 4 bits. |
| 59 | * Visualiser la netlist obtenue avec '''xsch'''. |
| 60 | * Tester la netlist avec '''asimut''' (utiliser le fichier '''.pat''' de la semaine précédente). |
| 61 | |
| 62 | == 1.3 Circuit addsubaccu == |
| 63 | |
| 64 | Maintenant, nous souhaitons que l’addaccu puisse effectuer soit des additions, soit des soustractions. |
| 65 | Un nouveau paramètre sera donc à apporter pour choisir la fonction à effectuer (Vous avez le choix pour le nom et les valeurs possibles de ce paramètre). |
| 66 | Ce nouveau composant sera sur le même schéma que le précédent, avec des modifications à apporter au circuit et/ou ses composants. |
| 67 | |
| 68 | * Créer un nouveau composant, appelé '''addsubaccu''' qui prend en compte cette nouvelle contrainte. |
| 69 | * Ecrire le script python permettant de créer des instances de l'addsubaccu. |
| 70 | * Ecrire un fichier '''Makefile''' paramétrable permettant de produire chaque composant et le circuit addsubaccu. |
| 71 | |
| 72 | == 1.4 Fonction Generate == |
| 73 | |
| 74 | Il n'est pas toujours très pratique d'avoir à générer avec plusieurs scripts les différents blocs d'un circuit. |
| 75 | Le langage '''Stratus''' fournit donc une alternative : la fonction '''Generate'''. |
| 76 | |
| 77 | Par exemple, pour générer une instance du multiplexeur fourni, il suffit d'ajouter la ligne suivante dans le fichier '''Stratus''' décrivant le circuit instanciant le multiplexeur : |
| 78 | {{{ |
| 79 | Generate ( "mux.mux", "mux_%d" % self.n, param = { 'nbit' : self.n } ) |
| 80 | }}} |
| 81 | |
| 82 | Dans cette fonction, le premier argument représente la classe '''Stratus''' créée (format : ''nom_de_fichier.nom_de_classe''), le deuxième argument est le nom du modèle généré, le dernier argument est un dictionnaire initialisant les différents paramètres de cette classe. |
| 83 | |
| 84 | * Modifier le fichier décrivant l'addsubaccu et le Makefile de façon à pouvoir créer les instances de ce circuit en n'ayant besoin que d'un script. |
| 85 | |
| 86 | == 1.5 Description de patterns == |
| 87 | |
| 88 | La chaîne de CAO '''ALLIANCE''' fourni un outil permettant de décrire des séquences de stimuli : l''outil '''GENPAT'''. |
| 89 | '''Stratus''' fournit le même service pour la chaîne de CAO '''Coriolis'''. |
| 90 | De plus, '''Stratus''' encapsule l'appel au simulateur '''ASIMUT'''. |
| 91 | |
| 92 | * Récupérer les deux fichiers décrivant le bloc mux avec création du fichier de patterns et simulation, et les étudier : |
| 93 | * [attachment:mux2.py Netlist en '''Stratus''' du bloc '''mux''' avec la description des patterns] |
| 94 | * [attachment:genmux2.py Script pour la création de la netlist, du fichier de patterns et du lancement du simulateur] |
| 95 | * Créer les patterns et effectuer la simulation des deux autres blocs de la même façon. |
| 96 | * Une fois tous les sous blocs validés, créer les patterns et effectuer la simulation du bloc addsubaccu. |
| 97 | |
| 98 | == 1.6 Bibliothèque DPGEN == |
| 99 | |
| 100 | TODO |
| 101 | |
| 102 | = 2 Compte rendu = |
| 103 | |
| 104 | Vous rédigerez un compte-rendu d'une page maximum pour ce TP. |
| 105 | Vous expliciterez '''en détail''' les choix que vous avez fait pour modifier le circuit '''addaccu''' et/ou ses composants de façon à créer le circuit '''adddsubaccu'''. |
| 106 | |
| 107 | Vous fournirez tous les fichiers écrits, avec les '''Makefile''' permettant d'effectuer la génération des deux circuits (et l'effacement des fichiers générés). |