Changes between Version 26 and Version 27 of ToolsCourseTp1


Ignore:
Timestamp:
Sep 18, 2008, 10:34:07 AM (16 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp1

    v26 v27  
    11{{{
    22#!html
    3 <h1> TP1 : Synthèse d'automates d'états finis </h1>
    4 }}}
     3<h1> TP1 : Synthèse </h1>
     4}}}
     5
    56[[PageOutline]]
    67= Avant-propos =
    7 Le but des quatre prochaines séances de TP est de présenter quelques outils de la chaîne ALLIANCE dont :
    8   * Les outils de synthèse logique '''SYF''', '''BOOM''', '''BOOG''', '''LOON''';
    9   * Le langage '''STRATUS''', utilisé pour la description des chemins de données;
    10   * L'éditeur graphique de netlist '''XSCH''';
    11   * Le simulateur '''ASIMUT''';
    12   Chaque outil possède ses propres options donnant des résultats plus ou moins adaptés
    13   suivant l'utilisation que l'on veut faire du circuit.
     8Le but de ce TP est de présenter quelques outils de la chaîne ALLIANCE dont :
     9  * Les outils de synthèse logique '''SYF''', '''BOOM''', '''BOOG''', '''LOON''' ;
     10  * L'éditeur graphique de netlist '''XSCH''' ;
     11  * Le simulateur '''ASIMUT''' ;
     12Chaque outil possède ses propres options donnant des résultats plus ou moins adaptés suivant l'utilisation que l'on veut faire du circuit.
    1413
    1514[[Image(synthese.jpg, nolink)]]
    1615
    1716
    18 
    19  
    20 
    21 
    22 
    23 
    2417= 1 Introduction =
    2518
    26 
    27 Un circuit combinatoire pur ne dispose pas
    28 de registres internes. De ce fait, ses sorties
    29 ne dépendent que de ses entrées primaires.
    30 
    31 A l'inverse, un circuit séquentiel synchrone
    32 disposant de registres internes voit ses sorties
    33 changer en fonction de ses entrées mais aussi
    34 des valeurs mémorisées dans ses registres.
    35 
     19  == 1.1 Synthèse d'automates d'états finis ==
     20
     21Un circuit combinatoire pur ne dispose pas de registres internes.
     22De ce fait, ses sorties ne dépendent que de ses entrées primaires.
     23
     24A l'inverse, un circuit séquentiel synchrone disposant de registres internes voit ses sorties changer en fonction de ses entrées mais aussi des valeurs mémorisées dans ses registres.
    3625
    3726[[Image(ex_digicode.jpg,nolink)]]
    3827
    39 
    40 En conséquence, l'état du circuit à l'instant t+1
    41 dépend aussi de son état à l'instant t. Ce type
    42 de circuit peut être modélisé par un automate
    43 d'états finis.
    44 
    45 
     28En conséquence, l'état du circuit à l'instant t+1 dépend aussi de son état à l'instant t.
     29Ce type de circuit peut être modélisé par un automate d'états finis.
    4630
    4731[[Image(automate.jpg, nolink)]]
    4832
    4933L'automate de MOORE voit l'état de ses sorties changer uniquement sur front d'horloge.
    50 Les entrées peuvent donc bouger entre deux fronts sans modifier les sorties. Par
    51 contre dans le cas d'un automate de MEALY, la variation des entrées peut modifier à jour
    52 
    53 
    54 
    55 = 2 SYF et VHDL =
    56 
    57 
    58 
    59 
    60 
    61 Afin de décrire de tels automates, on utilise un style particulier de description
    62 VHDL qui définit l'architecture '''"fsm"''' (finite-state machine).
    63 Le fichier correspondant possède également l'extension fsm. A partir de ce fichier,
    64 l'outil SYF effectue la synthèse d'automate et transforme cet automate abstrait en un
    65 réseau booléen. '''SYF ''' génère donc un fichier VHDL au format vbe. Comme la plupart
    66 des outils utilisés au laboratoire, il faut positionner certaines variables d'environnement
    67 avant d'utiliser '''SYF'''. Pour les connaître, reportez-vous au man de syf.
    68 
    69 
    70 = 3 Exemple =
     34Les entrées peuvent donc bouger entre deux fronts sans modifier les sorties.
     35Par contre dans le cas d'un automate de MEALY, la variation des entrées peut modifier à jour
     36
     37  == 1.2 SYF et VHDL ==
     38
     39Afin de décrire de tels automates, on utilise un style particulier de description VHDL qui définit l'architecture '''"fsm"''' (finite-state machine).
     40Le fichier correspondant possède également l'extension fsm. A partir de ce fichier, l'outil SYF effectue la synthèse d'automate et transforme cet automate abstrait en un réseau booléen.
     41'''SYF ''' génère donc un fichier VHDL au format vbe.
     42Comme la plupart des outils utilisés au laboratoire, il faut positionner certaines variables d'environnement avant d'utiliser '''SYF'''.
     43Pour les connaître, reportez-vous au man de syf.
     44
     45  == 1.3 Exemple ==
    7146
    7247Afin de se familiariser avec la syntaxe de description d'un fichier .fsm, un exemple
    7348de compteur de trois "1" successifs est présenté. Sa vocation est de détecter par exemple sur une liaison série une séquence de trois "1" successifs. Le graphe d'états que l'on cherche à décrire est représenté sur la figure .
    7449Le format fsm est également décrit dans une page man. Pensez à la consulter.
     50
    7551[[Image(graphe1.jpg, nolink)]]
    76 
    77 
    78 
    7952
    8053Figure  Graphe d'états d'un compteur de trois "1" successifs
     
    9871process (EP, i, reset)
    9972begin
    100 
    101 
    10273
    10374 if (reset=’1’) then
     
    156127}}}
    157128
    158 
    159 = 4 Réalisation du compteur =
    160 
    161 
     129  == 1.4 Synthèse logique ==
     130
     131La synthèse logique permet d'obtenir une netlist de portes à partir d'un réseau booléen (format .vbe).
     132Plusieurs outils sont disponibles :
     133
     134     * L'outil '''BOOM''' permet l'optimisation de réseau booléen avant synthèse.
     135     * L'outil '''BOOG''' offre la possibilité de synthétiser une netlist en utilisant une bibliothèque de cellules précaractérisées telle que '''SXLIB'''.
     136La netlist peut être soit au format '''.vst''' soit au format '''.al'''.
     137Vérifier la variable d'environnement '''MBK_OUT_LO=vst'''.
     138Pour plus de renseignements sur ces outils, reportez vous au man.
     139
     140  == 1.5 Résolution des problèmes de fanout (sortance) ==
     141
     142Les netlists générées contiennent parfois des signaux internes attaquant un nombre important de portes (grand fanout).
     143Ceci se traduit par une détérioration des fronts (rise time et fall time).
     144Il y a alors une perte en performance temporelle.
     145Afin de résoudre ces problèmes, l'outil '''LOON''' remplace les cellules ayant un fanout (i.e sortance) trop grand par des cellules plus puissantes ou bien insère des buffers.
     146
     147  == 1.6 Visualisation de la chaîne longue ==
     148
     149A tout moment, les netlists peuvent être éditées graphiquement. L'outil '''XSCH''' permet de visualiser le chemin le plus long grâce aux fichiers '''.xsc''' et '''.vst''' générés à la fois par '''BOOG''' et par '''LOON'''.
     150
     151[[Image(T_RC.jpg,nolink)]]
     152
     153La résistance équivalente R de la figure  est calculée sur la totalité des transistors du AND appartenant au chemin actif.
     154De même, la capacité C est calculée sur les transistors passants du NOR correspondant au chemin entre i0 et la sortie de la cellule.
     155
     156  == 1.7 Vérification de la netlist ==
     157
     158La netlist doit être certifiée.
     159Pour cela, on dispose du simulateur '''ASIMUT'''.
     160
     161= 2. Travail à faire =
     162
     163  == 2.1 Réalisation du compteur ==
    162164     
    163   * Ecrire la description d'un compteur de cinq "un" successifs sous la forme d'un
    164 automate de Moore.
     165  * Ecrire la description d'un compteur de cinq "un" successifs sous la forme d'un automate de Moore.
    165166  * Positionner les variables d'environnement.
    166   * Lancer '''SYF''' avec les options de codage '''-a''', '''-j''', '''-m''', '''-o''', '''-r''' et en utilisant les options
    167 '''-CEV'''.
     167  * Lancer '''SYF''' avec les options de codage '''-a''', '''-j''', '''-m''', '''-o''', '''-r''' et en utilisant les options '''-CEV'''.
    168168
    169169{{{
     
    171171}}}
    172172
    173 
    174 
    175 
    176  * Visualiser les fichiers '''.enc'''
    177  *  Ecrire un fichier de vecteurs de test et simuler sous '''ASIMUT'''.
     173 * Visualiser les fichiers '''.enc'''.
     174 * Ecrire un fichier de vecteurs de test et simuler sous '''ASIMUT'''.
     175
    178176Que se passe-t-il si le '''reset''' n'est pas positionné en début de pattern ? Pourquoi ?
    179177
    180 
    181 = 6 Automate pour digicode =
    182 
    183 
    184 L'exemple qui suit servira dans toute la suite du TP. On veut réaliser une puce
    185 pour digicode . Les spécifications sont les suivantes :
    186 
    187 
    188 
    189 Les chiffres de 0 à 9 sont codés en binaire naturel sur
    190 la manière suivante :
     178  == 2.2 Réalisation d'un automate pour digicode ==
     179
     180    === a. Spécification de l'automate ===
     181
     182L'exemple qui suit servira dans toute la suite du TP.
     183On veut réaliser une puce pour digicode.
     184Les spécifications sont les suivantes :
     185
     186Les chiffres de 0 à 9 sont codés en binaire naturel sur la manière suivante :
    191187
    192188A : 1010
    193 
    194189B : 1011
    195190
     
    199194 * Mode Nuit : La porte ne s'ouvre que si le code est correct.
    200195
    201 Pour distinguer les deux cas un "timer" externe calcule
    202 entre 8h00 et 20h00 et '0' sinon.
     196Pour distinguer les deux cas un "timer" externe calcule entre 8h00 et 20h00 et '0' sinon.
     197
    203198 * Le digicode commande une alarme dès qu'un des chiffres entrés n'est pas le bon
    204  * L'automate du digicode revient dans son état d'attente si rien n'est entré au clavier
    205 au bout de 5 secondes ou si l'alarme a sonné pendant 2mn- signal '''reset'''-
    206 Pour cela il reçoit un signal '''reset''' du timer externe.
     199 * L'automate du digicode revient dans son état d'attente si rien n'est entré au clavier au bout de 5 secondes ou si l'alarme a sonné pendant 2mn- signal '''reset'''- Pour cela il reçoit un signal '''reset''' du timer externe.
    207200 * La puce fonctionne à une fréquence de 10MHz.
    208  * Toute pression d'une touche du clavier est accompagnée du signal '''press_kbd'''
    209  Celui-ci signale à la puce que les données en sortie
    210 signal est à 1 durant un cycle d'horloge.
     201 * Toute pression d'une touche du clavier est accompagnée du signal '''press_kbd'''.
     202 Celui-ci signale à la puce que les données en sortie signal est à 1 durant un cycle d'horloge.
    211203Le code est '''53A17'''
    212204L'interface de l'automate est le suivant :
     
    220212 * out alarm
    221213
    222 
    223 = 7 Réalisation du digicode =
    224 
    225 Dessiner le graphe d'états de l'automate. (Les corrections seront distribuées)
    226 Le décrire au format .fsm .  Le synthétiser avec SYF en utilisant les options de codage '''-a''', '''-j''',''','''-m''', '''-o''', '''-r''' et en
    227 utilisant les options -CEV.
     214    === b. Travail à faire ===
     215
     216* Dessiner le graphe d'états de l'automate. (Les corrections seront distribuées)
     217* Le décrire au format .fsm .
     218* Le synthétiser avec SYF en utilisant les options de codage '''-a''', '''-j''',''','''-m''', '''-o''', '''-r''' et en utilisant les options -CEV.
    228219
    229220{{{
     
    231222}}}
    232223
    233 Ecrire le fichier .pat de vecteurs de test.
    234   * Simuler avec '''ASIMUT''' toutes les vues comportementales obtenues.
    235   * Adaptez le Makefile pour qu'il couvre tous les encodages possibles.
    236  Quelles sont vos remarques concernant la complexité des expressions (i.e temps)
    237 et le nombre de registres (i.e surface) des descriptions comportementales suivant
    238 les encodages ? En déduire les deux groupes d'encodage.
    239  Comparer aussi leurs nombres de littéraux.
    240 
     224* Ecrire le fichier .pat de vecteurs de test.
     225* Simuler avec '''ASIMUT''' toutes les vues comportementales obtenues.
     226* Adaptez le Makefile pour qu'il couvre tous les encodages possibles.
     227
     228Quelles sont vos remarques concernant la complexité des expressions (i.e temps) et le nombre de registres (i.e surface) des descriptions comportementales suivant les encodages ?
     229En déduire les deux groupes d'encodage.
     230Comparer aussi leurs nombres de littéraux.
     231
     232  == 2.3 Optimisation du réseau booléen ==
     233
     234* Lancer l'optimisation booléenne avec l'outil '''BOOM''' en demandant une optimisation en surface puis en délai.
     235
     236{{{
     237>boom -V <vbe_source> <vbe_destination> -
     238}}}
     239
     240* Essayer '''BOOM''' avec les différents algorithmes '''-s''', '''-j''', '''-b''', '''-g''', '''-p'''...
     241Le mode et le niveau d'optimisation sont aussi à changer.
     242
     243* Comparer le nombre de littéraux après factorisation.
     244
     245  == 2.4 Mapping sur cellules précaractérisées ==
     246
     247Pour chacun des réseaux booléens obtenus précédemment :
     248* Positionner les variables d'environnement ;
     249* Synthétiser la vue structurelle :
     250
     251{{{
     252>boog <vbe_source> -
     253}}}
     254
     255* Lancer '''BOOG''' sur les différentes netlists pour observer l'influence des options de '''SYF''' et de '''BOOM''' ;
     256* Valider le travail de '''BOOG''' en resimulant avec '''ASIMUT''' les netlists obtenues avec les vecteurs de test qui ont servi à valider le réseau booléen initial.
     257
     258  == 2.5 Visualisation de la netlist ==
     259
     260La chaîne longue est décrite dans le fichier '''.xsc''' produit par '''BOOG'''. L'outil '''XSCH''' l'utilisera pour colorer son chemin.
     261Pour lancer l'éditeur graphique :
     262
     263{{{
     264>xsch -I vst -l <vst_source> -
     265}}}
     266
     267La couleur rouge désigne le chemin critique.
     268Si vous utilisez l'option '-slide' qui permet d'afficher un ensemble de netlists, n'oubliez pas d'appuyer sur les touches '+' ou '-' pour éditer vos fichiers !
     269
     270  == 2.6 Optimisation de la netlist ==
     271
     272Pour toutes les vues structurelles obtenues précédemment :
     273* Lancer '''LOON''' avec la commande :
     274
     275{{{
     276>loon <vst_source> <vst_destination> <lax_param> -
     277}}}
     278
     279* Effectuer une optimisation de fanout en modifiant le facteur de fanout dans le fichier d'option '''.lax'''.
     280Imposer des valeurs de capacités sur les sorties.
     281
     282  == 2.7 Vérification de la netlist ==
     283
     284À effectuer sur la meilleure  de vos netlists (justifiez votre choix !) :
     285* Valider le travail de '''LOON''' en resimulant sous '''ASIMUT''' les netlists obtenues avec les vecteurs de test qui ont servi à valider la vue comportementale initiale.
     286* Mettre les différents résultats (surface/temps/optimisation) dans votre rapport.
     287* Quelle est, selon vous, la meilleure des netlists ? Pourquoi ?