Ignore:
Timestamp:
Oct 13, 2010, 8:15:51 PM (14 years ago)
Author:
rosiere
Message:

1) add test with SPECINT2K
2) new config of Selftest
3) modif RAT to support multiple depth_save ... but not finish (need fix Update Prediction Table)
4) add Function_pointer but need fix

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit
Files:
4 edited
7 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  
    237237  public  : void     genMealy_retire           (void);
    238238   
    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);
    244244#endif                                         
    245245
  • 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  
    3434    {
    3535       NO_SPECULATIVE_LOAD     //each load wait all previous store before the data cache access
    36      ,SPECULATIVE_LOAD_ACCESS //each load wait all previous store before the commiting
    37     //,SPECULATIVE_LOAD_COMMIT //each load commit the result before the end of dependence's check
    38     //,SPECULATIVE_LOAD_BYPASS //each load bypass the result before the end of dependence's check
     36   // ,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
    3939    } Tspeculative_load_t;
    4040 
     
    218218      {
    219219      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       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;
     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;
    222222//    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;
    223223      default    : return ""      ; break;
     
    230230        (x.compare(toString(                      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD     )) == 0))
    231231      return morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::NO_SPECULATIVE_LOAD;
    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;
     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;
    238238//  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
    239239//      (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  
    7777    switch (_param->_speculative_load)
    7878      {
    79       case SPECULATIVE_LOAD_ACCESS :
     79      case SPECULATIVE_LOAD_COMMIT :
    8080        {
    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;
    8686          break;
    8787        }
    8888      case NO_SPECULATIVE_LOAD     :
    89       // case SPECULATIVE_LOAD_COMMIT :
    90       //case SPECULATIVE_LOAD_BYPASS :
     89      // case SPECULATIVE_LOAD_ACCESS :
    9190      default                      :
    9291        {
  • 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  
    2121
    2222#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)
    2525  {
    2626    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  
    2121
    2222#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)
    2525  {
    2626    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  
    2121
    2222#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)
    2525  {
    2626    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  
    2121
    2222#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)
    2525  {
    2626    log_begin(Load_store_unit,FUNCTION);
     
    5656      {
    5757//      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                                   );
    6065       
    6166        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  
    228228
    229229#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)
    232232  {
    233233    log_begin(Load_store_unit,FUNCTION);
     
    659659                                  // The check is finish if all bit is set
    660660                                  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 !
    661663                                }
    662664                            }
     
    922924                  case STORE_QUEUE_COMMIT                  :
    923925                    {
    924                       throw ERRORMORPHEO(FUNCTION,"<Load_store_unit::function_speculative_load_access_transition> Invalid state and operation");
     926                      throw ERRORMORPHEO(FUNCTION,"Invalid state and operation");
    925927                    }
    926928                  }
  • 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  
    3030    switch (_speculative_load)
    3131      {
    32       case SPECULATIVE_LOAD_ACCESS :
     32      case SPECULATIVE_LOAD_COMMIT :
     33      // case SPECULATIVE_LOAD_ACCESS :
    3334        {
    34           if (not (_nb_bypass_memory == 0))
    35             test.error(_("Bypass memory is not supported. Please wait a next revision.\n"));
    36  
    3735          break;
    3836        }
    3937      case NO_SPECULATIVE_LOAD     :
    40       // case SPECULATIVE_LOAD_BYPASS :
    41       // case SPECULATIVE_LOAD_COMMIT :
    4238      default                      :
    4339        {
    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()));
    4841          break;
    4942        }
    5043      }
    5144
     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     
    5261    if (not (_size_store_queue >= 2))
    5362      test.error(_("Store queue must have at less two slot.\n"));
     
    6675      case PREDICTOR_NEVER_TAKE  :
    6776      case PREDICTOR_ALWAYS_TAKE :
     77        {
     78          break;
     79        }
    6880      case PREDICTOR_COUNTER     :
    6981        {
     82          test.error(toString(_("Predictor scheme \"%s\" is not yet supported.\n"),toString(_speculative_commit_predictor_scheme).c_str()));
     83
    7084          break;
    7185        }
Note: See TracChangeset for help on using the changeset viewer.