Changeset 16
- Timestamp:
- Jun 24, 2009, 4:56:12 PM (15 years ago)
- Location:
- trunk/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/l1cache.cpp
r5 r16 19 19 miss_info = false; 20 20 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); 21 29 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) { 23 37 24 38 // Retrieves the address … … 26 40 Address element(req, cstore->get_line_width()); 27 41 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 // 28 51 // Si la donnée est chargée dans le cache 29 52 if (cstore->is_loaded(element)) { … … 33 56 // affichage de l'action 34 57 cout << sc_time_stamp() << " L1Cache : access to loaded data [" << element << "] -> hit" << endl; 35 36 58 37 59 hit_info = true; … … 46 68 processing_queue->print(); 47 69 } 70 71 // 72 // XXX JUSQU'A ICI, C'est N'IMPORTE QUOI 73 // 48 74 } 49 75 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()) { 63 78 out_activate = false; 64 79 } -
trunk/src/main.cpp
r5 r16 25 25 sc_signal<bool> l1hit_info; 26 26 27 sc_signal<bool> make_report; 28 27 29 Processor processor("Processor", argv[1]); 28 30 L1Cache l1cache("L1Cache", 256, TAILLE_LIGNE, FULLY_ASSOCIATIVE, 2); … … 46 48 47 49 50 processor.simulation_terminate(make_report); 51 monitor.activate(make_report); 48 52 49 53 l1cache.hit_info(l1hit_info); -
trunk/src/monitor.cpp
r5 r16 18 18 void Monitor::make_my_report() 19 19 { 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 } 26 27 } -
trunk/src/monitor.h
r5 r16 6 6 int l1hits; 7 7 8 //sc_in<bool> make_report;8 sc_in_clk clock; 9 9 10 10 sc_in<bool> l1miss_signal; 11 11 sc_in<bool> l1hit_signal; 12 sc_in_clk clock; 12 13 sc_in<bool> activate; 14 13 15 14 16 void count_hit(); … … 22 24 23 25 SC_METHOD(make_my_report); 24 sensitive << clock;26 sensitive << activate; 25 27 26 28 SC_METHOD(count_hit); 27 sensitive << clock. neg();29 sensitive << clock.pos(); 28 30 29 31 SC_METHOD(count_miss); 30 sensitive << clock. neg();32 sensitive << clock.pos(); 31 33 } 32 34 }; -
trunk/src/processing_queue.cpp
r5 r16 39 39 } 40 40 } 41 42 bool ProcessingQueue::is_empty() 43 { 44 return elements.empty(); 45 } 46 41 47 42 48 void ProcessingQueue::mark_ready(Address &element) -
trunk/src/processing_queue.h
r5 r16 71 71 Address* get_next_ready(); 72 72 73 bool is_empty(); 74 73 75 // Updates the timeout of all internal requests 74 76 void update_time(); -
trunk/src/processor.cpp
r5 r16 1 1 #include "processor.h" 2 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 3 7 void Processor::driver() 4 8 { 9 out_activate = false; 10 5 11 // Si il y a encore des addresses à envoyer 6 12 if (!file.eof()) { 7 8 // On active le composant recepteur9 out_activate = true;10 13 11 14 // Et que la file n'est pas pleine, alors on les envoie … … 22 25 23 26 if (file.eof()){ 24 out_activate = false;25 27 return; 26 28 } … … 36 38 queue->insert(*addr); 37 39 40 // Lecture : 41 out_data = address; 42 out_activate = true; 38 43 read(*addr, &data); 44 39 45 } 46 // 40 47 // Si la file est pleine, il faudra attendre un cycle dans la même 41 48 // position 42 49 } 43 // Si il n'y a plus d'addresses à envoyer, on désactive la réception du44 // coté cache l1.45 else {46 // FIXME normalement, c'est superflu47 // on désactive la reception du coté du cache L148 out_activate = false;49 }50 50 } 51 51 52 // Est appelée lorsqu'une réponse depuis le cache L1 est envoyée. 52 53 void Processor::completed() 53 54 { 54 55 if (in_activate) { 56 cout << "processeur activé" << endl; 55 57 cout << sc_time_stamp() << " Processor : la donnée " << in_data << " est arrivée" << endl; 56 58 //queue->print(); 57 59 RawAddress address = in_data; 58 60 queue->remove(address); 61 cout << "--------------- processeur : état de la queue : " << endl; 62 queue->print(); 59 63 } 60 64 } … … 64 68 // ici, if ready 65 69 out_data = address; 70 out_activate = true; 66 71 } 67 72 -
trunk/src/processor.h
r9 r16 26 26 sc_out<RawAddress> out_data; 27 27 sc_out<bool> out_activate; 28 29 sc_out<bool> simulation_terminate; 28 30 29 31 // donnée retournée par le cache L1 -
trunk/src/queue.h
r5 r16 64 64 65 65 cout << "\t" << "QUEUE suppression de " << element << endl; 66 66 int num = elements.erase(element); 67 cout << "nombre d'elements supprimes = " << num << endl; 68 /* 67 69 if (elements.size() > 1) { 68 70 typename std::set<T>::iterator it; 69 71 it = elements.find(element); 70 72 if (it != elements.end()) 71 elements.erase( it);73 elements.erase(element); 72 74 else 73 75 std::cerr << "removal ignored" << std::endl; 74 76 } 75 77 */ 76 78 // if (elements.size() > 0) { 77 79 // std::cout << "QUEUE : j'efface l'element : " << element << std::endl;
Note: See TracChangeset
for help on using the changeset viewer.