Changes between Version 3 and Version 4 of CaoCourseTme7


Ignore:
Timestamp:
Mar 22, 2007, 12:21:02 PM (18 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme7

    v3 v4  
    4949}}}
    5050
    51 = B) Structures de données
     51= B) Structures de données =
    5252
    5353On utilise deux structures de données :
     
    5555 * structure représentant l'échéancier, c'est à dire l'ensemble ordonné des événements.
    5656 
    57 == B1) Le réseau Booléen
     57== B1) Le réseau Booléen ==
    5858
    5959Le réseau Booléen est constitué d'un ensemble de signaux et d'un ensemble de processus.
     
    104104}}}
    105105
    106 == B2) L’échéancier
     106== B2) L’échéancier ==
    107107
    108108L'échéancier permet d'enregistrer  et d'ordonner les événements dans le temps.
     
    131131}}}
    132132
    133 = C/ Fonctions d'accès aux structures de données
    134 
    135 Ce paragraphe définit les différentes fonctions permettant d’accéder aux structures de données définies ci-dessus. Dans un premier temps le code binaire exécutable de ces fonction vous est fourni, et vous pourrez utiliser ces fonctions pour construire en mémoire le réseau Booléen, construire et initialiser l’échéancier, et écrire la boucle principale de simulation qui a été présentée en cours. Dans un deuxième temps, il vous sera demandé d’écrire vous-même le code de ces fonctions.
    136 
    137 C1) Création d'un réseau Booléen "vide"
    138 
     133= B/ Fonctions d'accès aux structures de données =
     134
     135On présente ici les différentes fonctions permettant d’accéder aux structures de données définies ci-dessus.
     136Dans un premier temps le code binaire exécutable de ces fonction vous est fourni,
     137et vous pourrez utiliser ces fonctions pour construire en mémoire le réseau Booléen,
     138construire et initialiser l’échéancier, et écrire la boucle principale de simulation qui a été présentée en cours.
     139 Dans un deuxième temps, il vous sera demandé d’écrire vous-même le code de ces fonctions.
     140
     141== B1) réseau Booléen ==
     142
     143{{{
    139144boolnet_t * cons_boolnet (char * name)
    140 
     145}}}
    141146Les pointeurs sur les listes de signaux et de processus sont initialisés à NULL.
    142  
    143 C2) Création d’un signal
    144 
     147{{{
    145148signal_t * cons_signal (boolnet_t * bn, sigtype_t type, var_t * var)
    146 
    147 Cette fonction prend pour argument une variable Booléenne préalablement créée. Elle crée un signal et l’insère dans la liste des signaux du réseau correspondant à son type. Elle initialise à NULL les pointeurs FROM_PROCESS et TO_PROCESS. La valeur de la variable Booléenne est forcée à U.
    148  
    149 C3) Création d’un processus
    150  
     149}}}
     150Cette fonction prend pour argument une variable Booléenne préalablement créée.
     151Elle crée un signal et l’insère dans la liste des signaux du réseau correspondant à son type.
     152Elle initialise à NULL les pointeurs FROM_PROCESS et TO_PROCESS. La valeur de la variable Booléenne est forcée à U.
     153{{{
    151154process_t * cons_process (boolnet_t * bn, signal_t * sig, char * abl, long delay)
    152 
    153 Cette fonction prend pour argument un pointeur sur le signal de sortie, un pointeur sur un arbre ABL préalablement créé (en utilisant par exemple  la fonction parse_abl du TME5), et la valeur du temps de propagation.
    154 Elle crée une structure process_t, calcule le support de l'abl (sous forme d’une liste de signaux d’entrée), et met à jour les pointeurs contenus dans les structures représentant les signaux impliqués. Cette fonction vérifie le typage des signaux, c'est-à-dire qu'un signal de type IN ne peut avoir de processus générateur et qu'un signal de type OUT ne peut apparaître dans le support d'une fonction.
    155    
    156 C4) Création d’un échéancier « vide »
    157  
     155}}}
     156Cette fonction prend pour argument un pointeur sur le signal de sortie, un pointeur sur un arbre ABL préalablement créé
     157(en utilisant par exemple  la fonction parse_abl du TME5), et la valeur du temps de propagation.
     158Elle crée une structure process_t, calcule le support de l'abl (sous forme d’une liste de signaux d’entrée),
     159et met à jour les pointeurs contenus dans les structures représentant les signaux impliqués.
     160Cette fonction vérifie le typage des signaux, c'est-à-dire qu'un signal de type IN ne peut avoir de processus générateur
     161et qu'un signal de type OUT ne peut apparaître dans le support d'une fonction.
     162
     163== B2) Echéancier ==
     164{{{
    158165scheduler_t * cons_scheduler()
    159 
    160 Cette fonction fabrique un échéancier « vide ». La date courante  TC est initialisée à une valeur négative, et les pointeurs FIRST et CURRENT sont initialisés à NULL.
    161 
    162 C5) Création d’un événement
    163 
     166}}}
     167Cette fonction fabrique un échéancier « vide ».
     168La date courante  TC est initialisée à une valeur négative, et les pointeurs FIRST et CURRENT sont initialisés à NULL.
     169{{{
    164170event_t * cons_event(scheduler_t * sch, signal_t sig, long date, unsigned val)
    165 
    166 Cette  fonction construit un événement  sur le signal sig, à un certaine date , avec la valeur val, et introduit cet événement dans l’échéancier. Cette fonction met à jour les deux pointeurs FIRST et CURRENT dans l’échéancier, si cela est nécessaire.
    167 Cette fonction ne doit être utilisée que dans la phase d’initialisation, pour introduire dans l’échéancier les événements portant sur les signaux d’entrée du circuit (stimuli).
    168  
    169 C6) Insertion d’un événement
    170 
     171}}}
     172Cette  fonction construit un événement  sur le signal sig, à un certaine date ,
     173avec la valeur val, et introduit cet événement dans l’échéancier.
     174Cette fonction met à jour les deux pointeurs FIRST et CURRENT dans l’échéancier, si cela est nécessaire.
     175'''Attention''' : Cette fonction ne doit être utilisée que dans la phase d’initialisation, pour introduire dans l’échéancier
     176les événements portant sur les signaux d’entrée du circuit (stimuli).
     177{{{
    171178void add_event (scheduler_t * sch, signal_t sig, long delta, unsigned val)
    172 
    173 Cette fonction construit un événement portant sur le signal sig, à la date TC + delta, avec la valeur val, et le range dans l'échéancier. A la différence de la précédente, cette fonction utilise un temps relatif (delta), et ne modifie pas le les pointeurs FIRST et CURRENT. C’est cette fonction qui doit être utilisée dans la boucle de simulation.
    174 
    175 Dans le cas général, cette fonction doit en principe vérifier qu’il n’existe pas un autre événement postérieur sur le même signal, et retirer cet événement parasite s’il y a lieu. Dans notre cas, cela n’est pas nécessaire. Cette importante simplification est dûe à l'hypothèse qu'un processus est caractérisé par un unique temps de propagation, qui ne dépend pas de l'entrée qui commute. Avec cette hypothèse, tous les événements prévus se produisent effectivement.
    176    
    177 C7) Récupération des événements au temps TC
    178 
     179}}}
     180Cette fonction construit un événement portant sur le signal sig, à la date TC + delta, avec la valeur val, et le range dans l'échéancier.
     181A la différence de la précédente, cette fonction utilise un temps relatif (delta), et ne modifie pas le les pointeurs FIRST et CURRENT.
     182C’est cette fonction qui doit être utilisée dans la boucle de simulation.
     183Dans le cas général, cette fonction doit en principe vérifier qu’il n’existe pas un autre événement postérieur sur le même signal,
     184et retirer cet événement parasite s’il y a lieu. Dans notre cas, cela n’est pas nécessaire.
     185Cette importante simplification est dûe à l'hypothèse qu'un processus est caractérisé par un unique temps de propagation,
     186qui ne dépend pas de l'entrée qui commute. Avec cette hypothèse, tous les événements prévus se produisent effectivement.
     187{{{   
    179188bip_t * get_events (scheduler_t * sch)
    180 
     189}}}
    181190Cette fonction recherche dans l'échéancier les événements prévus au temps TC. Il peut y avoir plusieurs événements à la même date. Elle renvoie ces événements sous forme d'une liste chaînée de bi-pointeurs (qu'il faut penser à libérer quand ils ne sont plus utiles).
    182191