238 | | Ecrire le programme main() qui construit en mémoire |
239 | | le réseau Booléen correspondant au circuit-ci-dessus. |
| 238 | == C1) simulation du circuit ''etou'' == |
| 239 | |
| 240 | Le fichier ''etou.c'' contient un tout petit réseau Booléen ne contenant que deux noeuds, |
| 241 | et 4 signaux. Compilez ce fihier, et exécutez la simulation. |
| 242 | {{{ |
| 243 | > make |
| 244 | }}} |
| 245 | Lancez l'exécution duprogramme (construction du réseau Booléen et simulation). |
| 246 | {{{ |
| 247 | > ./etou |
| 248 | }}} |
| 249 | Vous pouvez visualiser le réseau Booléen avec la commande: |
| 250 | {{{ |
| 251 | > xv etou.gif |
| 252 | }}} |
| 253 | Vous pouvez visualiser le chronogramme résulat de la simulation avec la commande: |
| 254 | {{{ |
| 255 | > xpat -l etou |
| 256 | }}} |
| 257 | |
| 258 | == C2) Construction réseau Booléen de l'additionneur 2 bits == |
| 259 | |
| 260 | En vous inspirant du fichier ''etou.c'', écrivez le fichier ''adder.c'' qui construit en mémoire |
| 261 | le réseau Booléen correspondant au circuit additionneur 2 bits décrit ci-dessus. |
242 | | Pour vérifier la structure du réseau Booléen, on utilisera la fonction : |
243 | | {{{ |
244 | | void drive_boolnet(dotfmt_t format, boolnet_t *bn) |
245 | | }}} |
246 | | Cette fonction construit une représentation graphique du réseau Booléen, et la sauvegarde dans un fichier au format .gif ou .ps. |
247 | | {{{ |
248 | | enum dotfmt_t { GIF , PS } |
249 | | }}} |
250 | | Ecrivez le Makefile permettant de compiler ce programme main(), et exécutez-le. |
251 | | |
252 | | = D) Construction et initialisation de l’échéancier = |
253 | | |
254 | | Complêter le programme main() de la question C) pour créer l’échéancier |
| 264 | Pour vérifier la structure du réseau Booléen, on utilisera la fonction ''drive_boolnet()''. |
| 265 | Cette fonction construit une représentation graphique du réseau Booléen, et la sauvegarde dans un fichier |
| 266 | au format .gif ou .ps. |
| 267 | |
| 268 | Modifiez le Makefile permettant de compiler ce programme ''adder.c'', et exécutez-le. |
| 269 | |
| 270 | == C3) Construction et initialisation de l’échéancier == |
| 271 | |
| 272 | Complêter le fichier ''adder.c'' main() pour créer l’échéancier |
261 | | Pour vérifier que l’échéancier est correctement initialisé, on pourra utiliser la fonction: |
262 | | {{{ |
263 | | void drive_scheduler (boolnet_t * bn, scheduler_t * sch) |
264 | | }}} |
265 | | Cette fonction génére un fichier au format .pat que vous pouvez visualiser avec l’outil XPAT. |
266 | | |
267 | | = E) Ecriture de la boucle de simulation = |
268 | | |
269 | | Ecrire la boucle fonction principale de simulation qui enchaîne les phases “update” et “exécute” de l'algorithme de simulation ''event-driven'' présenté en cours. |
| 279 | Pour vérifier que l’échéancier est correctement initialisé, on pourra utiliser la fonction ''drive_scheduler ()''. |
| 280 | Cette fonction peut être utilisée avant même l'exécution de la fonction de simulation, pour générer un fichier au format .pat |
| 281 | qui décrit le chronogramme des signaux d'entrée. Vous pouvez visualiser ce chronogramme avec l’outil XPAT. |
| 282 | |
| 283 | == C4) Simulation effective du circuit additionneur |
| 284 | |
| 285 | Introduisez dans le fichier ''adder.c'' la fonction ''simulate()'' qui effectue la simulation du réseau Booléen, |
| 286 | jusqu'à ce qu'il n'y ait plus aucun événement à traiter dans l'échéancier. Compilez ce programme, |
| 287 | et analysez le chronogramme résultant |
| 288 | |
| 289 | == C5) Ecriture de la boucle de simulation == |
| 290 | |
| 291 | Ecrire en langage C la fonction ''simulate()''. Cette fonction contient une boucle ''while'' qui enchaîne les |
| 292 | deux phases “update” et “exécute” de l'algorithme de simulation ''event-driven'' présenté en cours. |