Changes between Version 9 and Version 10 of 2010CaoTme5


Ignore:
Timestamp:
Apr 9, 2010, 6:41:34 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2010CaoTme5

    v9 v10  
    112112La méthode {{{toDot()}}}  crée une  représentation graphique du  réseau booléen.  Cette fonction vous est fournie.
    113113{{{
    114 #!cpp
    115114class BoolNet {
    116115  private:
     
    149148
    150149{{{
    151 #!cpp
    152150class Signal {
    153151  private:
     
    188186
    189187{{{
    190 #!cpp
    191188class Process {
    192189  private:
     
    211208Pour le réaliser nous avons besoin de définr les objets suivants:
    212209
    213  * Une date (classe {{{Time}}}) contenant deux informations : le temps physique écoulé depuis le début de la simulation,
     210 * Une date (classe {{{Date}}}) contenant deux informations : le temps physique écoulé depuis le début de la simulation,
    214211   et un temps logique permettant de distinguer deux événements X et Y possédant le même temps physique,
    215212   mais reliés entre eux par une relation  de causalité : ceci se produit quand on veut représenter des processus
    216213   dont le temps de propagation est nul.
    217  * Un  événement  (classe {{{Event}}}),  comportant  la date ({{{Time}}}) à laquelle  il  se
    218    produit, Le ''signal'' qu'il affecte et la nouvelle valeur que va prendre ce signal.
     214 * Un  événement  (classe {{{Event}}}),  comportant  la date ({{{Date}}}) à laquelle  il  se
     215   produit, Le signal qu'il affecte et la nouvelle valeur que va prendre ce signal.
    219216 * Une structure  permettant  de stocker  les d'évenements  et de
    220    trier  ces  événements par  date  (croissantes).  Nous  allons  pour  cela utiliser  une
     217   trier  ces  événements par  dates  croissantes.  Nous  allons  pour  cela utiliser  une
    221218   {{{map<>}}} de {{{vector<>}}}.  C'est à  dire, une {{{map<>}}} dont chaque élément sera
    222    un {{{vector<>}}} d'évènements  et la clé une date ({{{Time}}}).  Deux événements sont synchrones s'ils ont le même temps physique
     219   un {{{vector<>}}} d'évènements  et la clé une date ({{{Date}}}).  Deux événements sont synchrones s'ils ont le même temps physique
    223220   '''et''' le même temps logique. L'ordre est sans importance au sein d'un ensemble d'événements synchrones, puisqu'il ne peut pas y avoir
    224221   de relation de causalité entre deux événements synchrones.
     
    228225'''Syntaxe:'''
    229226{{{
    230 #!cpp
    231227map<Time, vector<Event*> >  _events;
    232228}}}
    233229
    234 La  clé de tri  est un  objet de  type {{{Time}}}  et la  valeur associée  à cette  clé un
    235 {{{vector<Event*>}}}.  Il  faudra définir  pour  la  classe  {{{Time}}} une  surcharge  de
     230La  clé de tri  est un  objet de  type {{{Date}}}  et la  valeur associée  à cette  clé un
     231{{{vector<Event*>}}}.  Il  faudra définir  pour  la  classe  {{{Date}}} une  surcharge  de
    236232l'operateur   ''strictement   inférieur''   ({{{operator<()}}})   qui   définira   l'ordre
    237233chronologique.
     
    239235'''Accès et itérateurs'''
    240236{{{
    241 #!cpp
    242 map<Time, vector<Event*> >            _events;
    243 map<Time, vector<Event*> >::iterator  istate = _events.begin();
     237map<Date, vector<Event*> >            _events;
     238map<Date, vector<Event*> >::iterator  istate = _events.begin();
    244239
    245240for ( ; istate != _events.end() ; ++istate ) {
    246   const Time&     date   = (*istate).first;
     241  const Date&     date   = (*istate).first;
    247242  vector<Event*>& events = (*istate).second;
    248243
     
    251246}}}
    252247
    253  * '''Ordre du  parcours''': une propriété fondamentale  est que lors d'un  parcours de la
     248 * Lors d'un  parcours de la
    254249   {{{map<>}}} avec des itérateurs, les  éléments sont parcourus ''dans l'ordre défini par
    255250   la relation d'ordre de la clé'', c'est  à dire dans notre cas, l'ordre chronologique des dates croissantes.
     
    266261   {{{second}}} (valeur).
    267262
    268 '''La classe {{{Time}}}'''
    269 
    270 {{{
    271 #!cpp
    272 // Time is used as key by the scheduler's map<>.
    273 class Time {
     263'''La classe {{{Date}}}'''
     264
     265{{{
     266class Date {
    274267  private:
    275268    unsigned int  _time;
    276     unsigned int  _deltaCycle;
    277   public:
    278     inline               Time          ( unsigned int time, unsigned int dc );
     269    unsigned int  _delta;
     270  public:
     271    inline               Date          ( unsigned int time, unsigned int delta );
    279272    inline unsigned int  getTime       () const;
    280     inline unsigned int  getDeltaCycle () const;
     273    inline unsigned int  getDelta () const;
    281274    friend bool          operator<     ( const Time& lhs, const Time& rhs );
    282275};
     
    291284
    292285{{{
    293 #!cpp
    294286class Event {
    295287  private:
    296288    Signal*    _signal;
    297289    ValueType  _value;
    298     Time       _time;
    299   public:
    300     inline             Event             ( Signal*, ValueType, Time& );
     290    Date       _date;
     291  public:
     292    inline             Event             ( Signal*, ValueType, Date& );
    301293    inline  Signal*    getSignal         ();
    302294    inline  ValueType  getValue          ();
    303     inline  Time&      getTime           ();
     295    inline  Date&      getDate           ();
    304296    inline  void       updateSignalValue ();
    305297};
     
    312304
    313305 * {{{addEvent(Signal*,...)}}} : ajoute un nouvel évènement à l'échéancier. Pour donner la
    314    date  on ne  passe  pas d'objet  {{{Time}}},  mais ses  deux  composants {{{time}}}  et
    315    {{{dc}}}.
     306   date  on ne  passe  pas d'objet  {{{Date}}},  mais ses  deux  composants {{{time}}}  et
     307   {{{delta}}}.
    316308
    317309 * {{{addEvent(const std::string&,...)}}}  : une surcharge  de la fonction  précédente qui
     
    322314
    323315 * {{{toPatterns()}}} : écrit dans le flot  donné en argument le résultat de la simulation
    324    dans un  format lisible par l'outil  {{{xpat}}}.  La définition de  cette fonction vous
     316   dans un  format lisible par l'outil  {{{xpat}}}.  Cette fonction vous
    325317   est fournie.
    326318
    327319 * {{{_reset()}}}  : remet  toutes les  variables  (entrées, sorties,  internes) à  l'état
    328    initial (U).
     320   indéfini (U).
    329321
    330322 * {{{_header()}}} et {{{_display()}}} :  utilitaires vous permettant d'afficher l'état de
     
    332324
    333325{{{
    334 #!cpp
    335326class Scheduler {
    336327  private:
    337328    BoolNet*                              _network;
    338     std::map<Time, std::vector<Event*> >  _events;
     329    std::map<Date, std::vector<Event*> >  _events;
    339330  public:
    340331           Scheduler  ( BoolNet* );
    341     Event* addEvent   ( const std::string& variable, ValueType, unsigned int time, unsigned int dc=0 );
    342     Event* addEvent   ( Signal*, ValueType, unsigned int time, unsigned int dc=0 );
     332    Event* addEvent   ( const std::string& variable, ValueType, unsigned int time, unsigned int delta=0 );
     333    Event* addEvent   ( Signal*, ValueType, unsigned int time, unsigned int delta=0 );
    343334    void   simulate   ();
    344335    void   toPatterns ( std::ostream& );
     
    347338    void   _reset     ();
    348339    void   _header    ();
    349     void   _display   ( const Time& );
     340    void   _display   ( const Date& );
    350341};
    351342}}}
     
    357348l'ensemble des fichiers {{{.o}}}.
    358349
    359 Dans un second temps, il vous est demandé de progressivment remplacer les {{{.o}}} fournis
    360 par les vôtres.
     350Dans un second temps, il vous est demandé de progressivment remplacer les fichiers {{{.o}}} fournis
     351par les objets résultant de la compilation de votre propre code.
    361352
    362353
     
    414405des signaux d'entrée. Vous pouvez visualiser ce chronogramme avec l’outil {{{xpat}}}.
    415406
    416 
    417407== C2.3) Simulation effective du circuit additionneur ==
    418408
     
    421411traiter dans l'échéancier. Compilez ce programme, et analysez le chronogramme résultant
    422412
    423 
    424413== C2.4) Ecriture de la boucle de simulation ==
    425414