Changeset 16


Ignore:
Timestamp:
Jun 24, 2009, 4:56:12 PM (15 years ago)
Author:
guillaumeb
Message:

localisation du problème

Location:
trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/l1cache.cpp

    r5 r16  
    1919    miss_info = false;
    2020    hit_info = false;
     21   
     22   
     23    // Est-ce que des élements sont chargés dans ce cache, et prêts à être envoyés ?
     24    Address *head = processing_queue->get_next_ready();
     25    if (head != NULL) // oui
     26    {
     27        cout << "has ready elements  : " << *head <<  endl;
     28        cstore->do_load(*head);
    2129
    22     if (in_activate) {
     30        // Envoi de la réponse au processeur
     31        RawAddress req(head->as_absolute());
     32        out_activate = true;
     33        out_data = req;
     34
     35    // Sinon, est-ce qu'on est en train de faire une requête ?
     36    } else if (in_activate) {
    2337
    2438        // Retrieves the address
     
    2640        Address element(req, cstore->get_line_width());
    2741
     42        //
     43        //  XXX FIXME A PARTIR d'ICI C'EST N'IMPORTE QUOI
     44        //
     45        //  rappel : processing queue c'est le chargement interne. Si un élement
     46        //  est déjà chargé dans le cache, il va dans la processing queue,
     47        //  sinon, il part en requete dans le L2
     48        //
     49        //  ca m'apprendra a faire du copier coller et commiter sans verifier
     50        //
    2851        // Si la donnée est chargée dans le cache
    2952        if (cstore->is_loaded(element)) {
     
    3356            // affichage de l'action
    3457            cout << sc_time_stamp() << " L1Cache : access to loaded data [" << element << "]  -> hit" << endl;
    35 
    3658
    3759            hit_info = true;
     
    4668            processing_queue->print();
    4769        }
     70
     71        //
     72        // XXX JUSQU'A ICI, C'est N'IMPORTE QUOI
     73        //
    4874    }
    4975
    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) {
     76   
     77    if (!in_activate && processing_queue->is_empty()) {
    6378        out_activate = false;
    6479    }
  • trunk/src/main.cpp

    r5 r16  
    2525    sc_signal<bool> l1hit_info;
    2626
     27    sc_signal<bool> make_report;
     28
    2729    Processor processor("Processor", argv[1]);
    2830    L1Cache   l1cache("L1Cache", 256, TAILLE_LIGNE, FULLY_ASSOCIATIVE, 2);
     
    4648
    4749
     50    processor.simulation_terminate(make_report);
     51    monitor.activate(make_report);
    4852
    4953    l1cache.hit_info(l1hit_info);
  • trunk/src/monitor.cpp

    r5 r16  
    1818void Monitor::make_my_report()
    1919{
    20     cout << dec << endl <<
    21         "Report : " << endl <<
    22         "L1 total requests : " << l1hits + l1misses << endl <<
    23         "         hits     : " << l1hits << endl <<
    24         "         misses   : " << l1misses << endl;
    25 
     20    if (activate) {
     21        cout << dec << endl <<
     22            "Report : " << endl <<
     23            "L1 total requests : " << l1hits + l1misses << endl <<
     24            "         hits     : " << l1hits << endl <<
     25            "         misses   : " << l1misses << endl;
     26    }
    2627}
  • trunk/src/monitor.h

    r5 r16  
    66    int l1hits;
    77
    8     //sc_in<bool> make_report;
     8    sc_in_clk clock;
    99
    1010    sc_in<bool> l1miss_signal;
    1111    sc_in<bool> l1hit_signal;
    12     sc_in_clk clock;
     12
     13    sc_in<bool> activate;
     14
    1315
    1416    void count_hit();
     
    2224
    2325        SC_METHOD(make_my_report);
    24         sensitive << clock;
     26        sensitive << activate;
    2527
    2628        SC_METHOD(count_hit);
    27         sensitive << clock.neg();
     29        sensitive << clock.pos();
    2830
    2931        SC_METHOD(count_miss);
    30         sensitive << clock.neg();
     32        sensitive << clock.pos();
    3133    }
    3234};
  • trunk/src/processing_queue.cpp

    r5 r16  
    3939    }
    4040}
     41
     42bool ProcessingQueue::is_empty()
     43{
     44    return elements.empty();
     45}
     46
    4147
    4248void ProcessingQueue::mark_ready(Address &element)
  • trunk/src/processing_queue.h

    r5 r16  
    7171        Address* get_next_ready();
    7272
     73        bool is_empty();
     74
    7375        // Updates the timeout of all internal requests
    7476        void update_time();
  • trunk/src/processor.cpp

    r5 r16  
    11#include "processor.h"
    22
     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
    37void Processor::driver()
    48{
     9    out_activate = false;
     10
    511    // Si il y a encore des addresses à envoyer
    612    if (!file.eof()) {
    7 
    8         // On active le composant recepteur
    9         out_activate = true;
    1013
    1114        // Et que la file n'est pas pleine, alors on les envoie
     
    2225           
    2326            if (file.eof()){
    24                 out_activate = false;
    2527                return;
    2628            }
     
    3638            queue->insert(*addr);
    3739
     40            // Lecture :
     41            out_data = address;
     42            out_activate = true;
    3843            read(*addr, &data);
     44
    3945        }
     46        //
    4047        // Si la file est pleine, il faudra attendre un cycle dans la même
    4148        // position
    4249    }
    43     // Si il n'y a plus d'addresses à envoyer, on désactive la réception du
    44     // coté cache l1.
    45     else {
    46         // FIXME normalement, c'est superflu
    47         // on désactive la reception du coté du cache L1
    48         out_activate = false;
    49     }
    5050}
    5151
     52// Est appelée lorsqu'une réponse depuis le cache L1 est envoyée.
    5253void Processor::completed()
    5354{
    5455    if (in_activate) {
     56        cout << "processeur activé" << endl;
    5557        cout << sc_time_stamp() << " Processor : la donnée " << in_data << " est arrivée" << endl;
    5658        //queue->print();
    5759        RawAddress address = in_data;
    5860        queue->remove(address);
     61        cout << "--------------- processeur : état de la queue : " << endl;
     62        queue->print();
    5963    }
    6064}
     
    6468    // ici, if ready
    6569    out_data = address;
     70    out_activate = true;
    6671}
    6772
  • trunk/src/processor.h

    r9 r16  
    2626    sc_out<RawAddress> out_data;
    2727    sc_out<bool> out_activate;
     28
     29    sc_out<bool> simulation_terminate;
    2830
    2931    // donnée retournée par le cache L1
  • trunk/src/queue.h

    r5 r16  
    6464   
    6565    cout << "\t" << "QUEUE suppression de " << element <<  endl;
    66 
     66    int num = elements.erase(element);
     67    cout << "nombre d'elements supprimes = " << num << endl;
     68/*
    6769    if (elements.size() > 1) {
    6870        typename std::set<T>::iterator it;
    6971        it = elements.find(element);
    7072        if (it != elements.end())
    71             elements.erase(it);
     73            elements.erase(element);
    7274        else
    7375            std::cerr << "removal ignored" << std::endl;
    7476    }
    75 
     77*/
    7678//    if (elements.size() > 0) {
    7779//        std::cout << "QUEUE : j'efface l'element : " << element << std::endl;
Note: See TracChangeset for help on using the changeset viewer.