Changes between Initial Version and Version 1 of ToolsTp1


Ignore:
Timestamp:
Dec 3, 2009, 12:14:58 PM (15 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsTp1

    v1 v1  
     1{{{
     2#!html
     3<h1> TP1 : Synthèse logique </h1>
     4}}}
     5
     6[[PageOutline]]
     7
     8= 1 Introduction =
     9
     10Le but de ce TP est de présenter quelques outils de la chaîne '''ALLIANCE''' dont :
     11  * Les outils de synthèse logique '''SYF''', '''BOOM''', '''BOOG''', '''LOON''' ;
     12  * L'éditeur graphique de netlist '''XSCH''' ;
     13  * Les outils pour la preuve formelle '''FLATBEH''', '''PROOF''' ;
     14  * Le simulateur '''ASIMUT''' ;
     15Chaque 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.
     16
     17[[Image(synthese.jpg, nolink)]]
     18
     19Ce TP portera donc sur les méthodes de génération et de validation d’une netlist de cellules précaractérisées.
     20En effet, même s’il est acquis que les outils de génération d’ '''ALLIANCE''' fonctionnent correctement, la validation de chaque vue générée est indispensable.
     21Elle permet de limiter le coût et le temps de la conception.
     22
     23Les dépendances de données dans le flux sont matérialisées dans la réalité par une dépendance de fichier.
     24Le fichier '''Makefile''' exécuté à l’aide de la commande '''make''' permet de gérer ces dépendances.
     25Reportez vous à l'annexe pour plus de détails.
     26
     27'''Dorénavant l’usage de Makefile sera obligatoire pour chaque TP !!! '''
     28
     29  == 1.1 Synthèse d'automates d'états finis ==
     30
     31    === 1.1.1 Introduction ===
     32
     33Un circuit combinatoire pur ne dispose pas de registres internes.
     34De ce fait, ses sorties ne dépendent que de ses entrées primaires.
     35A 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.
     36En conséquence, l'état du circuit à l'instant t+1 dépend aussi de son état à l'instant t. Ce type de circuit peut être modélisé par un '''automate d'états finis'''.
     37
     38[[Image(ex_digicode.jpg,nolink)]]
     39
     40    === 1.1.2 Automates de MOORE et de MEALY ===
     41
     42L'automate de MOORE voit l'état de ses sorties changer uniquement sur front d'horloge.
     43Les entrées peuvent donc bouger entre deux fronts sans modifier les sorties.
     44Par contre dans le cas d'un automate de MEALY, la variation des entrées peut modifier à tout moment la valeur des sorties.
     45Dans notre '''fsm''' (''finite-state machine''), on s’imposera de séparer la fonction de génération de la fonction de transition (automate de Moore).
     46Pour cela, deux process distincts matérialiseront le calcul du prochain état et sa mise à jour.
     47
     48[[Image(automate.jpg, nolink)]]
     49
     50    === 1.1.3 VHDL et SYF ===
     51
     52Afin de décrire de tels automates, on utilise un style particulier de description VHDL qui définit l'architecture fsm.
     53Le fichier correspondant possède également l'extension '''.fsm'''.
     54
     55A partir de ce fichier, l'outil '''SYF''' effectue la synthèse d'automate et transforme cet automate abstrait en un réseau booléen.
     56'''SYF ''' génère donc un fichier VHDL au format '''.vbe'''.
     57Comme la plupart des outils utilisés au laboratoire, il faut positionner certaines variables d'environnement avant d'utiliser '''SYF'''.
     58Pour les connaître, reportez-vous au man de '''SYF'''.
     59
     60    === 1.1.4 Exemple ===
     61
     62Afin de se familiariser avec la syntaxe de description d'un fichier '''.fsm''', un exemple
     63de 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 .
     64
     65Le format fsm est également décrit dans une page man. Pensez à la consulter.
     66
     67[[Image(graphe1.jpg, nolink)]]
     68
     69{{{
     70entity circuit is
     71port (
     72      ck, i, reset, vdd, vss : in bit ;
     73      o : out bit
     74      ) ;
     75end circuit ;
     76
     77architecture MOORE of circuit is
     78
     79  type ETAT_TYPE is (E0, E1, E2, E3) ;
     80  signal EF, EP : ETAT_TYPE;
     81  -- pragma CURRENT_STATE EP
     82  -- pragma NEXT_STATE EF
     83  -- pragma CLOCK CK
     84
     85begin
     86
     87  process (EP, i, reset)
     88  begin
     89
     90    if (reset=’1’) then
     91      EF <= E0;
     92    else
     93      case EP is
     94        when E0 =>
     95          if (i=’1’) then
     96            EF <= E1;
     97          else
     98            EF <= E0;
     99          end if;
     100
     101        when E1 =>
     102          if (i=’1’) then
     103            EF <= E2;
     104          else
     105            EF <= E0;
     106          end if;
     107        when E2 =>
     108          if (i=’1’) then
     109            EF <= E3;
     110          else
     111            EF <= E0;
     112          end if;
     113        when E3 =>
     114          if (i=’1’) then
     115            EF <= E3;
     116          else
     117            EF <= E0;
     118          end if;
     119        when others => assert (’1’)
     120          report "etat illegal";
     121      end case;
     122    end if;
     123
     124    case EP is
     125      when E0 =>
     126        o <= ’0’;
     127      when E1 =>
     128        o <= ’0’;
     129      when E2 =>
     130        o <= ’0’;
     131      when E3 =>
     132        o <= ’1’;
     133      when others => assert (’1’)
     134        report "etat illegal";
     135    end case;
     136  end process;
     137
     138  process(ck)
     139  begin
     140    if (ck=’1’ and not ck’stable) then
     141      EP <= EF;
     142    end if;
     143  end process;
     144
     145end MOORE;
     146}}}
     147
     148  == 1.2 Synthèse logique et optimisation structurelle ==
     149
     150    === 1.2.1 Synthèse logique ===
     151
     152La synthèse logique permet d'obtenir une netlist de portes à partir d'un réseau booléen (format '''.vbe''').
     153Plusieurs outils sont disponibles.
     154
     155L'outil '''BOOM''' permet l'optimisation de réseau booléen avant synthèse.
     156
     157L'outil '''BOOG''' offre la possibilité de synthétiser une netlist en utilisant une bibliothèque de cellules précaractérisées telle que '''SXLIB'''.
     158La netlist peut être soit au format '''.vst''' soit au format '''.al'''.
     159Vérifier la variable d'environnement '''MBK_OUT_LO=vst'''.
     160
     161Pour plus de renseignements sur ces outils, reportez vous au man.
     162
     163    === 1.2.2 Résolution des problèmes de fanout (sortance) ===
     164
     165Les netlists générées contiennent parfois des signaux internes attaquant un nombre important de portes (grand fanout).
     166Ceci se traduit par une détérioration des fronts (rise time et fall time).
     167Il y a alors une perte en performance temporelle.
     168Afin 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.
     169
     170    === 1.2.3 Visualisation de la chaîne longue ===
     171
     172A 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'''.
     173
     174||[[Image(T_RC.jpg,nolink)]]||La résistance équivalente '''R'''  est calculée sur la totalité des transistors du AND appartenant au chemin actif. De 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.||
     175
     176    === 1.2.4 Vérification de la netlist ===
     177
     178La netlist doit être certifiée.
     179Pour cela, on dispose du simulateur '''ASIMUT''', mais aussi de l’outil '''PROOF''' qui procède à une comparaison formelle de deux descriptions comportementales ('''.vbe''').
     180L’outil '''FLATBEH''' permet d’obtenir le nouveau fichier comportemental à partir de la netlist.
     181
     182= 2. Travail à effectuer =
     183
     184Les différentes parties seront automatisées à l'aide d'un fichier '''Makefile'''.
     185
     186  == 2.1 Réalisation d'un compteur ==
     187     
     188   * En s'inspirant du compteur de trois "un" présenté, écrire au format '''.fsm''' la description d'un compteur de cinq "un" successifs sous la forme d'un automate de Moore.
     189   * Lancer '''SYF''' avec les options de codage '''-a''', '''-j''', '''-m''', '''-o''', '''-r''' et en utilisant les options '''-CEV'''.
     190     Penser à bien positionner les variables d'environnement.
     191{{{
     192> syf -CEV -a <fsm_source>
     193}}}
     194  * Visualiser les fichiers '''.enc'''.
     195  * Ecrire le fichier '''.pat''' de vecteurs de test.
     196  * Simuler avec '''ASIMUT''' toutes les vues comportementales obtenues.
     197
     198'''Que se passe-t-il si le reset n'est pas positionné en début de pattern ? Pourquoi ? '''
     199
     200  == 2.2 Réalisation d'un digicode ==
     201
     202On veut réaliser une puce pour digicode.
     203Les spécifications sont les suivantes :
     204
     205{{{
     206Les chiffres de 0 à 9 sont codés en binaire naturel sur 4 bits. A et B sont codés comme suit : A = 1010, B = 1011.
     207
     208Le digicode fonctionne en deux modes :
     209
     210 * Mode Jour : La porte s'ouvre en appuyant sur "O"
     211 * Mode Nuit : La porte ne s'ouvre que si le code est correct.
     212
     213Pour distinguer les deux cas un "timer" externe calcule le signal jour qui vaut ’1’ entre 8h00 et 20h00 et ’0’ sinon.
     214
     215 * Le digicode commande une alarme dès qu'un des chiffres entrés n'est pas le bon
     216 * L'automate 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,
     217   pour cela il reçoit un signal reset du timer externe.
     218 * La puce fonctionne à une fréquence de 10MHz.
     219 * Toute pression d'une touche du clavier est accompagnée du signal press_kbd.
     220   Celui-ci signale à la puce que les données en sortie du clavier sont valides. Ce signal est à 1 durant un cycle d’horloge.
     221
     222
     223Le code est 53A17.
     224
     225L'interface de l'automate est le suivant :
     226 * in ck
     227 * in reset
     228 * in jour
     229 * in i[3 :0]
     230 * in O
     231 * in press_kbd
     232 * out porte
     233 * out alarm
     234}}}
     235
     236    === 2.2.1 Réalisation de l'automate ===
     237
     238  * Dessiner le graphe d'états de l'automate.
     239  * Le décrire au format '''.fsm'''.
     240  * Le synthétiser avec '''SYF''' en utilisant les options de codage '''-a''', '''-j''', '''-m''', '''-o''', '''-r''' et en utilisant les options '''-CEV'''.
     241{{{
     242> syf -CEV -a <fsm_source>
     243}}}
     244  * Ecrire le fichier '''.pat''' de vecteurs de test.
     245  * Simuler avec '''ASIMUT''' toutes les vues comportementales obtenues.
     246
     247'''Quelles 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 ?
     248En déduire les deux groupes d'encodage.'''
     249
     250'''Comparez aussi leurs nombres de littéraux.'''
     251
     252    === 2.2.2 Optimisation du réseau booléen ===
     253
     254  * Lancer l'optimisation booléenne avec l'outil '''BOOM''' en demandant une optimisation en '''surface''' puis en '''délai'''.
     255{{{
     256> boom -V <vbe_source> <vbe_destination>
     257}}}
     258  * Essayer '''BOOM''' avec les différents algorithmes '''-s''', '''-j''', '''-b''', '''-g''', '''-p'''... Le mode et le niveau d'optimisation sont aussi à changer.
     259  * Comparer le nombre de littéraux après factorisation.
     260
     261  === 2.2.3 Mapping sur cellules précaractérisées ===
     262
     263Pour chacun des réseaux booléens obtenus précédemment :
     264  * Synthétiser la vue structurelle (en faisant attention à bien positionner les variables d'environnement).
     265{{{
     266> boog <vbe_source>
     267}}}
     268  * Observer l'influence des options de '''SYF''' et de '''BOOM''' avec les différences netlists obtenues.
     269  * 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.
     270
     271  === 2.2.4 Visualisation de la netlist ===
     272
     273  * Utiliser '''XSCH''' pour visualiser le chemin critique.
     274{{{
     275>xsch -I vst -l <vst_source>
     276}}}
     277La couleur rouge désigne le chemin critique.
     278Si 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 !
     279
     280  === 2.2.5 Optimisation de la netlist ===
     281
     282Pour toutes les vues structurelles obtenues précédemment :
     283  * Lancer '''LOON'''.
     284{{{
     285> loon <vst_source> <vst_destination> <lax_param>
     286}}}
     287  * Effectuer une optimisation de fanout en modifiant le facteur de fanout dans le fichier d'option '''.lax'''. Imposer des valeurs de capacités sur les sorties.
     288
     289  === 2.2.6 Vérification de la netlist ===
     290
     291'''Quelle est, selon vous, la meilleure des netlists ? Pourquoi ?'''
     292
     293À effectuer sur cette netlist :
     294  * 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.
     295
     296  * Deux précautions valent mieux qu’une ! Faire une vérification formelle de la netlist en la comparant au fichier comportemental d’origine issu de '''SYF'''.
     297{{{
     298> flatbeh <vst_source> <vbe_dest>
     299
     300> proof -d <vbe_origine> <vbe_dest>
     301}}}
     302
     303  * Comparer si les deux fichiers sont bien identiques.
     304
     305= 3 Compte rendu =
     306
     307Vous rédigerez un compte-rendu d'une page maximum pour ce TP dans lequel vous ferez attention à bien répondre aux questions posées ici (en gras).
     308Vous inclurez les différents résultats obtenus surface/temps/optimisation.
     309Vous enverrez ce compte rendu par mail aux encadrants.
     310
     311
     312
     313
     314En plus du compte rendu, vous joindrez les fichiers écrits (soit une archive contenant tous les fichiers par mail, soit le chemin d'accès aux fichiers, en faisant attention dans ce cas à laisser les droits).
     315
     316Vous ferez attention à joindre les différents Makefile créés de façon à ce que la commande '''make''' effectue les différentes étapes de ce TP.
     317Ces fichiers doivent également fournir une règle '''clean''' qui permet d'effacer tous les fichiers générés.
     318
     319Ces règles seront à suivre durant tous les TPs de Tools.