| 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. |