source: trunk/src/processor.cpp @ 16

Last change on this file since 16 was 16, checked in by guillaumeb, 15 years ago

localisation du problème

File size: 2.0 KB
RevLine 
[2]1#include "processor.h"
2
[16]3
4// Pilote du simulateur
5// lit une addresse dans un fichier si il y a encore des addresses
6// à lire et si la file d'attente n'est pas pleine
[2]7void Processor::driver()
8{
[16]9    out_activate = false;
10
[2]11    // Si il y a encore des addresses à envoyer
12    if (!file.eof()) {
13
14        // Et que la file n'est pas pleine, alors on les envoie
15        if (!queue->is_full()) {
16
17            // Vide pour l'instant, c'est la donnée a charger
18            int data;
19           
20            // RawAddresse à charger dans le cache...
21            unsigned int address;
22
23            // Lecture de l'addresse depuis le fichier
24            file >> address;
25           
26            if (file.eof()){
27                return;
28            }
29
30            cout << "lecture de " << dec << address << " dans le fichier" << endl;
31
32            RawAddress *addr = new RawAddress(address);
33
34            // Si il y a encore des addresses à envoyer
35            cout << sc_time_stamp() << " Processor : request " << *addr << endl;
36
37            // on ajoute la requete a la queue
38            queue->insert(*addr);
39
[16]40            // Lecture :
41            out_data = address;
42            out_activate = true;
[2]43            read(*addr, &data);
[16]44
[2]45        }
[16]46        //
[2]47        // Si la file est pleine, il faudra attendre un cycle dans la même
48        // position
49    }
50}
51
[16]52// Est appelée lorsqu'une réponse depuis le cache L1 est envoyée.
[2]53void Processor::completed()
54{
55    if (in_activate) {
[16]56        cout << "processeur activé" << endl;
[2]57        cout << sc_time_stamp() << " Processor : la donnée " << in_data << " est arrivée" << endl;
58        //queue->print();
59        RawAddress address = in_data;
60        queue->remove(address);
[16]61        cout << "--------------- processeur : état de la queue : " << endl;
62        queue->print();
[2]63    }
64}
65
66void Processor::read(RawAddress &address, int *value)
67{
68    // ici, if ready
69    out_data = address;
[16]70    out_activate = true;
[2]71}
72
73void Processor::write(RawAddress &address, int value)
74{
75    // ici, if ready
76    out_data = address;
77}
Note: See TracBrowser for help on using the repository browser.