- Timestamp:
- Oct 13, 2010, 8:15:51 PM (14 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop
- Files:
-
- 5 edited
- 42 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h
r138 r145 237 237 public : void genMealy_retire (void); 238 238 239 public : void function_speculative_load_ access_transition (void);240 public : void function_speculative_load_ access_genMoore (void);241 public : void function_speculative_load_ access_genMealy_dcache (void);242 public : void function_speculative_load_ access_genMealy_insert (void);243 public : void function_speculative_load_ access_genMealy_retire (void);239 public : void function_speculative_load_commit_transition (void); 240 public : void function_speculative_load_commit_genMoore (void); 241 public : void function_speculative_load_commit_genMealy_dcache (void); 242 public : void function_speculative_load_commit_genMealy_insert (void); 243 public : void function_speculative_load_commit_genMealy_retire (void); 244 244 #endif 245 245 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h
r138 r145 34 34 { 35 35 NO_SPECULATIVE_LOAD //each load wait all previous store before the data cache access 36 37 //,SPECULATIVE_LOAD_COMMIT //each load commit the result before the end of dependence's check38 //,SPECULATIVE_LOAD_BYPASS //each load bypassthe result before the end of dependence's check36 // ,SPECULATIVE_LOAD_ACCESS //each load wait all previous store before the commiting 37 // ,SPECULATIVE_LOAD_ACCESS == (SPECULATIVE_LOAD_COMMIT and speculative_commit_predictor_scheme == PREDICTOR_NEVER_TAKE) 38 ,SPECULATIVE_LOAD_COMMIT //each load commit the result before the end of dependence's check 39 39 } Tspeculative_load_t; 40 40 … … 218 218 { 219 219 case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD : return "no_speculative_load" ; break; 220 221 //case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT : return "speculative_load_commit"; break;220 // case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_ACCESS : return "speculative_load_access"; break; 221 case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT : return "speculative_load_commit"; break; 222 222 // case morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_BYPASS : return "speculative_load_bypass"; break; 223 223 default : return "" ; break; … … 230 230 (x.compare(toString( morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD )) == 0)) 231 231 return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD; 232 233 234 235 //if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT))) == 0) or236 //(x.compare(toString( morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT )) == 0))237 //return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT;232 // if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_ACCESS))) == 0) or 233 // (x.compare(toString( morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_ACCESS )) == 0)) 234 // return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_ACCESS; 235 if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT))) == 0) or 236 (x.compare(toString( morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT )) == 0)) 237 return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_COMMIT; 238 238 // if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_BYPASS))) == 0) or 239 239 // (x.compare(toString( morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::SPECULATIVE_LOAD_BYPASS )) == 0)) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit.cpp
r138 r145 77 77 switch (_param->_speculative_load) 78 78 { 79 case SPECULATIVE_LOAD_ ACCESS:79 case SPECULATIVE_LOAD_COMMIT : 80 80 { 81 function_transition = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_ access_transition ;82 function_genMoore = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_ access_genMoore ;83 function_genMealy_dcache = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_ access_genMealy_dcache;84 function_genMealy_insert = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_ access_genMealy_insert;85 function_genMealy_retire = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_ access_genMealy_retire;81 function_transition = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_commit_transition ; 82 function_genMoore = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_commit_genMoore ; 83 function_genMealy_dcache = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_commit_genMealy_dcache; 84 function_genMealy_insert = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_commit_genMealy_insert; 85 function_genMealy_retire = &morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Load_store_unit::function_speculative_load_commit_genMealy_retire; 86 86 break; 87 87 } 88 88 case NO_SPECULATIVE_LOAD : 89 // case SPECULATIVE_LOAD_COMMIT : 90 //case SPECULATIVE_LOAD_BYPASS : 89 // case SPECULATIVE_LOAD_ACCESS : 91 90 default : 92 91 { -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMealy_dcache.cpp
r144 r145 21 21 22 22 #undef FUNCTION 23 #define FUNCTION "Load_store_unit::function_speculative_load_ access_genMealy_dcache"24 void Load_store_unit::function_speculative_load_ access_genMealy_dcache (void)23 #define FUNCTION "Load_store_unit::function_speculative_load_commit_genMealy_dcache" 24 void Load_store_unit::function_speculative_load_commit_genMealy_dcache (void) 25 25 { 26 26 log_begin(Load_store_unit,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMealy_insert.cpp
r144 r145 21 21 22 22 #undef FUNCTION 23 #define FUNCTION "Load_store_unit::function_speculative_load_ access_genMealy_insert"24 void Load_store_unit::function_speculative_load_ access_genMealy_insert (void)23 #define FUNCTION "Load_store_unit::function_speculative_load_commit_genMealy_insert" 24 void Load_store_unit::function_speculative_load_commit_genMealy_insert (void) 25 25 { 26 26 log_begin(Load_store_unit,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMealy_retire.cpp
r144 r145 21 21 22 22 #undef FUNCTION 23 #define FUNCTION "Load_store_unit::function_speculative_load_ access_genMealy_retire"24 void Load_store_unit::function_speculative_load_ access_genMealy_retire (void)23 #define FUNCTION "Load_store_unit::function_speculative_load_commit_genMealy_retire" 24 void Load_store_unit::function_speculative_load_commit_genMealy_retire (void) 25 25 { 26 26 log_begin(Load_store_unit,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp
r144 r145 21 21 22 22 #undef FUNCTION 23 #define FUNCTION "Load_store_unit::function_speculative_load_ access_genMoore"24 void Load_store_unit::function_speculative_load_ access_genMoore (void)23 #define FUNCTION "Load_store_unit::function_speculative_load_commit_genMoore" 24 void Load_store_unit::function_speculative_load_commit_genMoore (void) 25 25 { 26 26 log_begin(Load_store_unit,FUNCTION); … … 56 56 { 57 57 // internal_MEMORY_OUT_PTR = (reg_LOAD_QUEUE_PTR_READ+1)%_param->_size_load_queue; 58 internal_MEMORY_OUT_VAL = ((_load_queue[internal_MEMORY_OUT_PTR]._state == LOAD_QUEUE_COMMIT_CHECK) or 59 (_load_queue[internal_MEMORY_OUT_PTR]._state == LOAD_QUEUE_COMMIT)); 58 59 // have valid entry if : 60 // * load_queue entry need commit 61 // * load_queue entry have rsp and can make a speculative commit 62 internal_MEMORY_OUT_VAL = ((_load_queue[internal_MEMORY_OUT_PTR]._state == LOAD_QUEUE_COMMIT) or 63 (_load_queue[internal_MEMORY_OUT_PTR]._can_speculative_commit and (_load_queue[internal_MEMORY_OUT_PTR]._state == LOAD_QUEUE_COMMIT_CHECK)) 64 ); 60 65 61 66 if (internal_MEMORY_OUT_VAL) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp
r144 r145 228 228 229 229 #undef FUNCTION 230 #define FUNCTION "Load_store_unit::function_speculative_load_ access_transition"231 void Load_store_unit::function_speculative_load_ access_transition (void)230 #define FUNCTION "Load_store_unit::function_speculative_load_commit_transition" 231 void Load_store_unit::function_speculative_load_commit_transition (void) 232 232 { 233 233 log_begin(Load_store_unit,FUNCTION); … … 659 659 // The check is finish if all bit is set 660 660 end_check = (_load_queue[index_load_queue]._check_hit_byte == _param->_mask_check_hit_byte); 661 662 // TODO : autoriser l'envoie de la donnée ! 661 663 } 662 664 } … … 922 924 case STORE_QUEUE_COMMIT : 923 925 { 924 throw ERRORMORPHEO(FUNCTION," <Load_store_unit::function_speculative_load_access_transition>Invalid state and operation");926 throw ERRORMORPHEO(FUNCTION,"Invalid state and operation"); 925 927 } 926 928 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Parameters_msg_error.cpp
r138 r145 30 30 switch (_speculative_load) 31 31 { 32 case SPECULATIVE_LOAD_ACCESS : 32 case SPECULATIVE_LOAD_COMMIT : 33 // case SPECULATIVE_LOAD_ACCESS : 33 34 { 34 if (not (_nb_bypass_memory == 0))35 test.error(_("Bypass memory is not supported. Please wait a next revision.\n"));36 37 35 break; 38 36 } 39 37 case NO_SPECULATIVE_LOAD : 40 // case SPECULATIVE_LOAD_BYPASS :41 // case SPECULATIVE_LOAD_COMMIT :42 38 default : 43 39 { 44 if (not (_nb_bypass_memory == 0)) 45 test.error(toString(_("In the load scheme '%s', they have none bypass.\n"),toString(_speculative_load).c_str())); 46 47 test.error(toString(_("Speculative load scheme '%s' is not supported. Please wait a next revision.\n"),toString(_speculative_load).c_str())); 40 test.error(toString(_("Speculative load scheme '%s' is not yet supported.\n"),toString(_speculative_load).c_str())); 48 41 break; 49 42 } 50 43 } 51 44 45 if (_nb_bypass_memory > 0) 46 switch (_speculative_load) 47 { 48 case SPECULATIVE_LOAD_COMMIT : 49 { 50 break; 51 } 52 case NO_SPECULATIVE_LOAD : 53 // case SPECULATIVE_LOAD_ACCESS : 54 default : 55 { 56 test.error(toString(_("In the load scheme '%s', they have none bypass.\n"),toString(_speculative_load).c_str())); 57 break; 58 } 59 } 60 52 61 if (not (_size_store_queue >= 2)) 53 62 test.error(_("Store queue must have at less two slot.\n")); … … 66 75 case PREDICTOR_NEVER_TAKE : 67 76 case PREDICTOR_ALWAYS_TAKE : 77 { 78 break; 79 } 68 80 case PREDICTOR_COUNTER : 69 81 { 82 test.error(toString(_("Predictor scheme \"%s\" is not yet supported.\n"),toString(_speculative_commit_predictor_scheme).c_str())); 83 70 84 break; 71 85 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp
r138 r145 8 8 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h" 9 9 #include "Behavioural/include/Allocation.h" 10 #include "Behavioural/include/Types.h" 10 11 #include "Common/include/Max.h" 11 12 … … 373 374 uint32_t size_general_register = log2(_max_nb_general_register); 374 375 uint32_t size_special_register = log2(_max_nb_special_register); 375 376 377 bool speculative_commit = false; 378 for (uint32_t i=0; i<_nb_execute_unit; i++) 379 if (_is_load_store_unit [i]) 380 { 381 uint32_t x = _translate_num_execute_unit [i]; 382 383 speculative_commit |= ((_speculative_load[x] == multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD) and (_speculative_commit_predictor_scheme[x] != PREDICTOR_NEVER_TAKE)); 384 } 385 log_printf(TRACE,Execute_loop,FUNCTION," * speculative_commit : %d",speculative_commit); 386 376 387 test(); 377 388
Note: See TracChangeset
for help on using the changeset viewer.