Changes between Initial Version and Version 1 of MOCCA-TP2-2019


Ignore:
Timestamp:
Nov 27, 2010, 5:22:56 PM (14 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MOCCA-TP2-2019

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