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 | |
| 135 | On présente ici les différentes fonctions permettant d’accéder aux structures de données définies ci-dessus. |
| 136 | Dans un premier temps le code binaire exécutable de ces fonction vous est fourni, |
| 137 | et vous pourrez utiliser ces fonctions pour construire en mémoire le réseau Booléen, |
| 138 | construire 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 | {{{ |
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 | }}} |
| 156 | Cette 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. |
| 158 | Elle crée une structure process_t, calcule le support de l'abl (sous forme d’une liste de signaux d’entrée), |
| 159 | et met à jour les pointeurs contenus dans les structures représentant les signaux impliqués. |
| 160 | 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 |
| 161 | et qu'un signal de type OUT ne peut apparaître dans le support d'une fonction. |
| 162 | |
| 163 | == B2) Echéancier == |
| 164 | {{{ |
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 | }}} |
| 172 | Cette fonction construit un événement sur le signal sig, à un certaine date , |
| 173 | avec la valeur val, et introduit cet événement dans l’échéancier. |
| 174 | Cette 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 |
| 176 | les événements portant sur les signaux d’entrée du circuit (stimuli). |
| 177 | {{{ |
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 | }}} |
| 180 | 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. |
| 181 | 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. |
| 182 | C’est cette fonction qui doit être utilisée dans la boucle de simulation. |
| 183 | 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, |
| 184 | et retirer cet événement parasite s’il y a lieu. Dans notre cas, cela n’est pas nécessaire. |
| 185 | Cette importante simplification est dûe à l'hypothèse qu'un processus est caractérisé par un unique temps de propagation, |
| 186 | qui ne dépend pas de l'entrée qui commute. Avec cette hypothèse, tous les événements prévus se produisent effectivement. |
| 187 | {{{ |