source: trunk/l2cache.cpp @ 2

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

commit initial

File size: 2.3 KB
Line 
1#include "l2cache.h"
2
3void L2Cache::read()
4{
5    // On donne la priorité aux éléments en attente :
6    //      - si des éléments sont présents dans la file d'attente
7    //          on les envoie
8    //      - TODO on doit pouvoir les packer pour pouvoir les envoyer par deux
9    //      - si aucun élément n'est présent dans la liste, on arrête d'envoyer (in_activate = false)
10    // indépendemment,
11    //      - si on recoit un élement, on regarde s'il est chargé dans le cache:
12    //          - si il est chargé, on le place dans la liste des addresses à envoyer,
13    //              on attend un moment timeout avant de l'envoyer
14    //          - si il n'est pas chargé, on envoit une requete au cache L2,
15    //              on le place dans la liste des addresses à envoyer.
16    //      - XXX le timeout devrait peut etre etre effectué, meme pour les données non présentes dans le L1
17
18    miss_info = false;
19    hit_info = false;
20
21    if (in_activate) {
22
23        // Retrieves the request address
24        RawAddress req = in_data;
25        Address element(req, cstore->get_line_width());
26
27        // Si la donnée est chargée dans le cache
28        if (cstore->is_loaded(element)) {
29           
30            out_activate = true;
31
32            // affichage de l'action
33            cout << sc_time_stamp() << " L2Cache : access to loaded data [" <<
34                element << "]  -> hit" << endl;
35
36
37            hit_info = true;
38            out_data = in_data;
39        } else {
40
41            // affichage de l'action
42            cout << sc_time_stamp() << " L2Cache : access to loaded data [" <<
43                element << "]  -> miss" << endl; 
44
45            miss_info = true;
46            processing_queue->insert(element, latency);
47            processing_queue->print();
48        }
49    }
50
51    Address *head = processing_queue->get_next_ready(); 
52    if (head != NULL)
53    {
54        cout << "has ready elements " << endl;
55        //processing_queue->print();
56
57        cstore->do_load(*head);
58
59        // Envoi de la réponse au processeur
60        RawAddress req(head->as_absolute());
61        out_activate = true;
62        out_data = req;
63    } else if (! in_activate) {
64        out_activate = false;
65    }
66
67    processing_queue->update_time();
68   
69}
70
71
72void L2Cache::write()
73{
74    // cout << sc_time_stamp() << " L2Cache.write()" << endl;
75}
Note: See TracBrowser for help on using the repository browser.