Changes between Initial Version and Version 1 of ToolsTp3-2010


Ignore:
Timestamp:
Jan 8, 2011, 3:03:50 PM (14 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsTp3-2010

    v1 v1  
     1{{{
     2#!html
     3<h1> TP2 : Modélisation structurelle avec Stratus </h1>
     4}}}
     5[[PageOutline]]
     6
     7Dans 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
     9Nous verrons dans ce TP comment '''Stratus''' permet de décrire des netlists paramétrables et de les utiliser.
     10
     11Pensez à conculter la documentation de '''Stratus''' en cas de besoin :
     12
     13https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/stratus/index.html
     14
     15= 1 Introduction =
     16
     17  == 1.1 Circuit addaccu ==
     18
     19Dans le circuit '''addaccu''' sont instanciés trois blocs '''mux''', '''reg''' et '''add'''.
     20
     21[[Image(addaccu.jpg, nolink)]]
     22
     23Les deux blocs '''mux''' et '''reg''' sont des générateurs paramétrable décrits dans le langage '''Stratus''', ce sont des interconnexions de portes de bases, fournies par la bibliothèque de cellules pré-caractérisées SXLIB.
     24
     25Le bloc '''add''', également décrit dans le langage '''Stratus''', instancie un bloc '''full_adder''', lui même étant une interconnexion de porte '''sxlib''', décrit en '''Stratus'''.
     26
     27Le circuit '''addaccu''' a donc trois niveaux de hiérarchie.
     28
     29  == 1.2 La bibliothèque sxlib ==
     30
     31Une cellule pré-caractérisée (en anglais ''standard cell'') est une fonction élémentaire pour laquelle on dispose des différentes "vues" permettant son utilisation par des outils CAO :
     32
     33    * vue physique : dessin des masques, permettant d'automatiser le placement et le routage,
     34    * vue logique : schéma en transistors permettant la caractérisation (surface, consommation, temps de propagation),
     35    * vue comportementale : description VHDL permettant la simulation logique des circuits utilisant cette bibliothèque.
     36
     37La bibliothèque de cellules utilisée dans ce TP est la bibliothèque '''sxlib''', développée par le laboratoire LIP6, pour la chaîne de CAO '''Alliance'''.
     38La particularité de cette bibliothèque est d'être "portable" : le dessin des masques de fabrication utilise une technique de dessin symbolique, qui permet d'utiliser cette bibliothèque de cellules pour n'importe quel procédé de fabrication CMOS possédant au moins trois niveaux d'interconnexion.
     39
     40Evidemment les caractéristiques physiques (surface occupée, temps de propagation) dépendent du procédé de fabrication.
     41Les cellules que vous utiliserez dans ce TP ont été caractérisées pour un procédé de fabrication CMOS 0.35 micron.
     42
     43La liste des cellules disponibles dans la bibliothèque '''sxlib''' peut être obtenue en consultant la page man :
     44{{{
     45> man sxlib
     46}}}
     47
     48Comme vous pourrez le constater, il existe plusieurs cellules réalisant la même fonction logique. Les deux cellules ''na2_x1'' et ''na2_x4'' réalisent toutes les deux la fonction NAND à 2 entrées, et ne diffèrent entre elles que par leur puissance électrique : la cellule ''na2_x4'' est capable de charger une capacité de charge 4 fois plus grande que la cellule ''na2_x1''. Evidemment, plus la cellule est puissante, plus la surface de silicium occupée est importante.
     49Vous pouvez visualiser le dessin des masques de ces cellules en utilisant l'éditeur graphique de la chaîne '''alliance''' '''graal'''.
     50
     51  == 1.3 Schéma des blocs ==
     52
     53    === 1.3.1 Multiplexeur ===
     54
     55Un multiplexeur 4 bits peut être réalisé en utilisant 4 cellules ''mx2_x2'' suivant le schéma ci-dessous :
     56
     57[[Image(mux.jpg, nolink)]]
     58
     59Vous pouvez consulter le modèle comportemental de la cellule ''mx2_x2'' : [attachment:mx2_x2.vbe mx2_x2.vbe].
     60
     61    === 1.3.2 Registre ===
     62
     63Un registre 4 bits peut être réalisé en utilisant 4 cellules ''sff1_x4'' suivant le schéma ci-dessous :
     64
     65[[Image(reg.jpg, nolink)]]
     66
     67La cellule ''sff1_x4'' est une bascule D à échantillonnage sur front montant. Vous pouvez consulter le modèle comportemental de cette cellule : [attachment:sff1_x4.vbe sff1_x4.vbe].
     68
     69    === 1.3.3 Additionneur ===
     70
     71Un additionneur 4 bits peut être réalisé en interconnectant 4 additionneurs 1 bit suivant le schéma ci-dessous :
     72
     73[[Image(adder.jpg, nolink)]]
     74
     75Un additionneur 1 bit (encore appelé ''Full Adder'') possède 3 entrées a,b,c, et deux sorties s et r.
     76La table de vérité est définie par le tableau ci-dessous.
     77Le bit de "somme" s vaut 1 lorsque le nombre de bits d'entrée égal à 1 est impair.
     78Le bit de "report" est égal à 1 lorsqu'au moins deux bits d'entrée valent 1.
     79
     80||a||b||c||s||r||
     81||0||0||0||0||0||
     82||0||0||1||1||0||
     83||0||1||0||1||0||
     84||0||1||1||0||1||
     85||1||0||0||1||0||
     86||1||0||1||0||1||
     87||1||1||0||0||1||
     88||1||1||1||1||1||
     89
     90Ceci donne les expressions suivantes :
     91
     92    * s <= a XOR b XOR c
     93    * r <= (a AND b) OR (a AND c) OR (b AND c)
     94
     95Il existe plusieurs schémas possibles pour réaliser un ''Full Adder''.
     96Nous vous proposons d'utiliser le schéma ci-dessous, qui utilise trois cellules ''na2_x1'' (NAND 2 entrées), et deux cellules ''xr2_x1'' (XOR 2 entrées) :
     97
     98[[Image(full_adder.jpg, nolink)]]
     99
     100= 2 Travail à effectuer =
     101
     102  == 2.1 Bloc mux ==
     103
     104  * Récupérer les deux fichiers permettant de créer le bloc '''mux''' et les étudier :
     105    * [attachment:mux.py Netlist en '''Stratus''' du bloc '''mux''']
     106    * [attachment:genmux.py Script pour la création de la netlist]
     107
     108  Ce bloc a la fonctionnalité suivante :
     109{{{
     110si (cmd==0) alors s <= i0 sinon s <= i1
     111}}}
     112  i0, i1 et s ayant un nombre de bit paramétrable
     113
     114  * Créer une instance de mux sur 4 bits.
     115  Pour ce faire, il faut exécuter le script fourni avec le bon paramètre :
     116    * soit en exécutant la commande suivante :
     117{{{
     118> python gen_mux.py -n 2
     119}}}
     120    * soit en modifiant les droits du fichier :
     121{{{
     122> chmod u+x gen_mux.py
     123> ./gen_mux.py -n 2
     124}}}
     125
     126Si le script s'effectue sans erreur, un fichier ''.vst'' est normalement généré.
     127Vous pouvez vérifier qu'il décrit bien le circuit voulu.
     128
     129  == 2.2 Bloc registre ==
     130
     131  * En s'inspirant du multiplexeur, écrire le bloc '''reg''' avec '''Stratus''' en utilisant exclusivement les cellules de la bibliothèque '''sxlib'''. Ce bloc prend lui aussi comme paramètre le nombre de bits. En outre, il vérifie que son paramètre est compris entre 2 et 64 (ce n’est pas fait dans mux).
     132  * Ecrire le script python permettant de créer l'instance du registre.
     133
     134  == 2.3 Bloc additionneur ==
     135
     136  * Ecrire le bloc '''full_adder''' en utilisant exclusivement les cellules de la bibliothèque '''sxlib'''.
     137  * Ecrire le script python permettant de créer l'instance du '''full_adder'''.
     138  * Ecrire le bloc '''adder''' instanciant le '''full_adder''' créé. Ce bloc prend lui aussi comme paramètre le nombre de bits et vérifie que son paramètre est compris entre 2 et 64 (ce n’est pas fait dans mux).
     139  * Ecrire le script python permettant de créer l'instance de l'additionneur.
     140
     141  == 2.4 Circuit addaccu ==
     142 
     143  * Ecrire le circuit '''addaccu''' avec '''Stratus'''.
     144    Ce circuit instancie les trois blocs précédents ('''mux''', '''reg''' et '''adder''').
     145    Le circuit '''addaccu''' prend également comme paramètre le nombre de bits.
     146  * Ecrire le script python permettant de créer des instances de l'addaccu.
     147  * Ecrire un fichier '''Makefile paramétrable''' permettant de produire chaque composant et le circuit '''addaccu''' en choisissant le nombre de bits.
     148  * Générer le circuit sur 4 bits.
     149  * Visualiser la netlist obtenue avec '''xsch'''.
     150
     151  == 2.5 Fonction Generate ==
     152
     153Il n'est pas toujours très pratique d'avoir à générer avec plusieurs scripts les différents blocs d'un circuit.
     154Le langage '''Stratus''' fournit donc une alternative : la fonction '''Generate'''.
     155
     156Par exemple, pour générer une instance du multiplexeur fourni, il suffit d'ajouter la ligne suivante dans le fichier '''addaccu''' :
     157{{{
     158Generate ( "mux.mux", "mux_%d" % self.n, param = { 'nbit' : self.n } )
     159}}}
     160
     161Dans 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.
     162
     163  * Modifier le fichier décrivant l'addaccu et le Makefile de façon à pouvoir créer les instances de ce circuit en n'ayant besoin que d'un script.
     164
     165  == 2.6 Description de patterns ==
     166
     167La chaîne de CAO '''Alliance''' fournit un outil permettant de décrire des séquences de stimuli : l'outil '''genpat'''.
     168'''Stratus''' fournit le même service pour la chaîne de CAO '''Coriolis'''.
     169De plus, '''Stratus''' encapsule l'appel au simulateur '''asimut'''.
     170
     171  * Récupérer les deux fichiers décrivant le bloc mux avec création du fichier de patterns et simulation, et les étudier :
     172    * [attachment:mux2.py Netlist en '''Stratus''' du bloc '''mux''' avec la description des patterns]
     173    * [attachment:genmux2.py Script pour la création de la netlist, du fichier de patterns et du lancement du simulateur]
     174  * Créer les patterns et effectuer la simulation des deux autres blocs de la même façon.
     175  * Une fois tous les sous blocs validés, créer les patterns et effectuer la simulation du bloc '''addaccu'''.
     176
     177  == 2.7 Circuit addsubaccu ==
     178
     179Maintenant, nous souhaitons que l’addaccu puisse effectuer soit des additions, soit des soustractions.
     180Un 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).
     181Ce nouveau composant sera sur le même schéma que le précédent, avec des modifications à apporter au circuit et/ou ses composants.
     182
     183  * Créer un nouveau composant, appelé '''addsubaccu''' qui prend en compte cette nouvelle contrainte.
     184  * Ecrire le script python permettant de créer des instances de l'addsubaccu.
     185  * Ecrire un fichier '''Makefile''' paramétrable permettant de produire le circuit '''addsubaccu'''.
     186  * Ecrire les patterns du composant '''addsubaccu''' et valider le bloc.
     187
     188  == 2.8 Bibliothèque dpgen ==
     189
     190Une bibliothèque d'opérateurs existe en '''Stratus''', la bibliothèque '''dpgen'''.
     191
     192Pour connaitre les générateurs dont vous disposez, consultez la documentation fournie :
     193
     194https://www-asim.lip6.fr/recherche/coriolis/doc/en/html/dpgen/index.html
     195
     196  * Ecrire un nouveau composant '''addsubaccu''' en utilisant les générateurs paramétrables de cette bibliothèque à votre disposition.
     197  * Valider ce bloc avec les mêmes patterns que le bloc précédent.
     198
     199= 3 Compte rendu =
     200
     201Vous rédigerez un compte-rendu d'une page maximum pour ce TP.
     202
     203  * Vous présenterez un schéma de la hiérarchie du circuit '''addaccu'''.
     204  * Vous expliciterez les choix que vous avez fait pour modifier le circuit '''addaccu''' et/ou ses composants de façon à créer le circuit '''adddsubaccu'''.
     205  * Vous décrirez quels générateurs de la bibliothèque '''dpgen''' vous avez utilisé et pourquoi.
     206
     207Vous 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).