Changes between Version 1 and Version 2 of 2010CaoTme5


Ignore:
Timestamp:
Apr 8, 2010, 11:40:49 PM (15 years ago)
Author:
jpc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2010CaoTme5

    v1 v2  
    124124           Signal*                addSignal    ( const std::string&, SignalType );
    125125           Process*               addProcess   ( const std::string&, const std::string&, unsigned int delay );
     126           void                   toDot        ( std::ostream& );
     127           void                   toDot        ();
    126128};
    127129}}}
     
    142144 * {{{addProcess()}}}  : ajoute une  nouvelle cible  à l'ensemble  des cibles.  Equivaut à
    143145   créer un arc dans le graphe.
     146 * {{{toDot()}}} :  crée une  représentation graphique du  réseau booléen.  Cette fonction
     147   vous est fournie.
    144148
    145149{{{
     
    197201    inline unsigned int  getDelay      ();
    198202           void          display       ( std::ostream& );
     203           std::string   toString      ();
    199204};
    200205}}}
     
    211216   problèmes de causalité.
    212217
    213  * Un événement (classe {{{Event}}}), avec le  temps ({{{Time}}}) auquel il se produit, Le
    214    ''signal'' qu'il affecte et la nouvelle valeur que va prendre ce signal.
     218 * Un  événement  (classe {{{Event}}}),  comprtant  le  temps  ({{{Time}}}) auquel  il  se
     219   produit, Le ''signal'' qu'il affecte et la nouvelle valeur que va prendre ce signal.
    215220
    216221 * Une structure  lui permettant  de stocker  les ensembles d'évenements  par dates  et de
    217222   trier  ces  ensembles par  date  (croissantes).  Nous  allons  pour  cela utiliser  une
    218223   {{{map<>}}} de {{{vector<>}}}.  C'est à  dire, une {{{map<>}}} dont chaque élément sera
    219    un {{{vector<>}}}  d'évènements et la clé  une date ({{{Time}}}. Notez qu'au sein d'un
     224   un {{{vector<>}}} d'évènements  et la clé une date ({{{Time}}}).  Notez qu'au sein d'un
    220225   ensemble d'évènements synchrones l'ordre est indifférent.
    221226
     
    247252}}}
    248253
    249  * '''Ordre du parcours''': une propriété fondamentale est que lors d'un parcours de la
    250    {{{map<>}}} avec des itérateurs, les éléments sont parcourus ''dans l'ordre défini
    251    par la relation d'ordre de la clé'', c'est à dire dans notre cas, l'ordre chronologique
    252    de {{{Time}}}.
    253 
    254  * Cet ordre est maintenu automatiquent lors d'ajout ou de retrait d'élements dans la
     254 * '''Ordre du  parcours''': une propriété fondamentale  est que lors d'un parcours de la
     255   {{{map<>}}} avec des itérateurs, les  éléments sont parcourus ''dans l'ordre défini par
     256   la relation d'ordre de la clé'', c'est  à dire dans notre cas, l'ordre chronologique de
     257   {{{Time}}}.
     258
     259 * Cet ordre  est maintenu automatiquement lors  d'ajout ou de retrait d'élements dans la
    255260   {{{map<>}}}.
    256261
     
    259264   l'itérateur pointe...).
    260265
    261  * Les éléments d'une {{{map<>}}} sont des paires {{{(clé,valeur)}}}, pour y accéder à
    262    partir de l'itérateur, il faut utiliser les attributs public {{{first}}} (clé) et
     266 * Les éléments  d'une {{{map<>}}}  sont des paires  {{{(clé,valeur)}}}, pour y accéder à
     267   partir  de l'itérateur,  il faut  utiliser les  attributs public  {{{first}}} (clé) et
    263268   {{{second}}} (valeur).
    264269
     
    319324 * {{{simulate()}}} : effectue la simulation.
    320325
    321  * {{{drive()}}} : écrit dans le flot donné  en argument le résultat de la simulation dans
    322    un format  lisible par  l'outil {{{xpat}}}.  La définition de  cette fonction  vous est
    323    fournie.
     326 * {{{toPatterns()}}} : écrit dans le flot  donné en argument le résultat de la simulation
     327   dans un  format lisible par l'outil  {{{xpat}}}.  La définition de  cette fonction vous
     328   est fournie.
    324329
    325330 * {{{_reset()}}}  : remet  toutes les  variables  (entrées, sorties,  internes) à  l'état
     
    336341    std::map<Time, std::vector<Event*> >  _events;
    337342  public:
    338            Scheduler ( BoolNet* );
    339     Event* addEvent  ( const std::string& variable, ValueType, unsigned int time, unsigned int dc=0 );
    340     Event* addEvent  ( Signal*, ValueType, unsigned int time, unsigned int dc=0 );
    341     void   simulate  ();
    342     void   drive     ( std::ostream& );
    343   private:
    344     void   _reset    ();
    345     void   _header   ();
    346     void   _display  ( const Time& );
     343           Scheduler  ( BoolNet* );
     344    Event* addEvent   ( const std::string& variable, ValueType, unsigned int time, unsigned int dc=0 );
     345    Event* addEvent   ( Signal*, ValueType, unsigned int time, unsigned int dc=0 );
     346    void   simulate   ();
     347    void   toPatterns ( std::ostream& );
     348    void   toPatterns ();
     349  private:
     350    void   _reset     ();
     351    void   _header    ();
     352    void   _display   ( const Time& );
    347353};
    348354}}}
     
    351357= C) Travail à réaliser =
    352358
    353 Dans un premier temps vous devrez utiliser le simulateur qui vous est fourni dans
     359Dans  un premier  temps  vous  devrez utiliser  le  simulateur qui  vous  est fourni dans
    354360l'ensemble des fichiers {{{.o}}}.
    355361
    356 Dans un second temps, il vous est demandé de progressivment remplacer les {{{.o}}}
    357 fournis par les vôtres.
    358 
    359 
    360 == C1) simulation du circuit ''etou'' ==
    361 
    362 Le fichier ''etou.c'' contient un tout petit réseau Booléen ne contenant que deux noeuds,
     362Dans un second temps, il vous est demandé de progressivment remplacer les {{{.o}}} fournis
     363par les vôtres.
     364
     365
     366== C1) simulation du circuit ''And Or'' ==
     367
     368Le fichier ''AndOr.c'' contient un tout petit réseau Booléen ne contenant que deux noeuds,
    363369et 4 signaux. Compilez ce fihier, et exécutez la simulation.
    364370
    365371Vous pouvez visualiser le réseau Booléen avec la commande:
    366372{{{
    367 > eog etou.gif
     373> eog AndOr.png
    368374}}}
    369375Vous pouvez visualiser le chronogramme résulat de la simulation avec la commande:
    370376{{{
    371 > xpat -l etou
     377> xpat -l AndOr
    372378}}}
    373379
     
    383389== C2.1) Construction réseau Booléen de l'additionneur ==
    384390
    385 En vous inspirant du fichier  {{{etou.c}}}, écrivez le fichier {{{adder.c}}} qui construit
     391En vous inspirant du fichier  {{{etou.c}}}, écrivez le fichier {{{Adder.c}}} qui construit
    386392en  mémoire  le  réseau  Booléen  correspondant  au circuit  additionneur  2  bits  décrit
    387393ci-dessus.   On   utilisera  pour   cela  les  fonctions   {{{BoolNet::addProcess()}}}  et
     
    392398{{{.gif}}} ou {{{.ps}}}.
    393399
    394 Modifiez le Makefile permettant de compiler ce programme ''adder.c'', et exécutez-le.
     400Modifiez le Makefile permettant de compiler ce programme ''Adder.c'', et exécutez-le.
    395401
    396402
    397403== C2.2) Construction et initialisation de l’échéancier ==
    398404
    399 Compléter le fichier {{{adder.c}}} {{{main()}}} pour créer l’échéancier et initialiser les
     405Compléter le fichier {{{Adder.c}}} {{{main()}}} pour créer l’échéancier et initialiser les
    400406événements  sur les  signaux d’  entrée a0,  b0,  c0, a1  et b1  de façon  à respecter  le
    401407chronogramme ci-dessous.   On utilisera la fonction  Scheduler::addEvent() et add_event().
     
    404410au temps {{{T = 0}}}.
    405411
    406 [[Image(chronogramme.png, nolink)]]
     412[[Image(chronogramme.png,nolink)]]
    407413
    408414Pour vérifier que l’échéancier est correctement initialisé, on pourra utiliser la fonction
     
    414420== C2.3) Simulation effective du circuit additionneur ==
    415421
    416 Introduisez  dans  le fichier  {{{adder.c}}}  la  méthode {{{Scheduler::simulate()}}}  qui
     422Introduisez  dans  le fichier  {{{Adder.c}}}  la  méthode {{{Scheduler::simulate()}}}  qui
    417423effectue la simulation du réseau Booléen, jusqu'à  ce qu'il n'y ait plus aucun événement à
    418424traiter dans l'échéancier. Compilez ce programme, et analysez le chronogramme résultant