source: trunk/src/l1cache.cpp @ 5

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

Réorganisation des dossiers

déplacement des fichiers source dans le sous dossier ./src
déplacement de systemc dans le sous-dossier ./lib

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