source: trunk/src/processor.cpp

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

localisation du problème

File size: 2.0 KB
Line 
1#include "processor.h"
2
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
7void Processor::driver()
8{
9    out_activate = false;
10
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
40            // Lecture :
41            out_data = address;
42            out_activate = true;
43            read(*addr, &data);
44
45        }
46        //
47        // Si la file est pleine, il faudra attendre un cycle dans la même
48        // position
49    }
50}
51
52// Est appelée lorsqu'une réponse depuis le cache L1 est envoyée.
53void Processor::completed()
54{
55    if (in_activate) {
56        cout << "processeur activé" << endl;
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);
61        cout << "--------------- processeur : état de la queue : " << endl;
62        queue->print();
63    }
64}
65
66void Processor::read(RawAddress &address, int *value)
67{
68    // ici, if ready
69    out_data = address;
70    out_activate = true;
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.