Ignore:
Timestamp:
May 26, 2009, 9:01:47 PM (15 years ago)
Author:
rosiere
Message:

1) Context_state : Add statistics
2) Add configuration with multi front_end
3) Add optionnal pid at log filename

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Core_Glue.h

    r118 r120  
    209209
    210210    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    211   private   : uint32_t                        reg_PRIORITY ;
    212211
    213212    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Parameters.h

    r117 r120  
    6262
    6363  public : uint32_t             ** _translate_num_execute_loop_to_ooo_engine_execute_loop_id;//[nb_execute_loop][execute_loop_nb_ooo_engine]
     64  public : Tcontext_t           ** _translate_num_ooo_engine_to_execute_loop_ooo_engine_id  ;//[nb_ooo_engine][nb_execute_loop]
    6465
    6566  public : uint32_t             ** _execute_loop_nb_inst_insert                             ;//[nb_execute_loop][execute_loop_nb_ooo_engine]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp

    r117 r120  
    7777          for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    7878            for (uint32_t j=0; j<_param->_nb_inst_decod [i]; ++j)
    79               PORT_WRITE(out_RENAME_FRONT_END_ID [i][j],_param->_translate_num_front_end_to_ooo_engine_front_end_id[i]);
    80        
     79              {
     80                PORT_WRITE(out_RENAME_FRONT_END_ID [i][j],_param->_translate_num_front_end_to_ooo_engine_front_end_id[i]);
     81              }
     82
    8183        log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str());
    8284
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp

    r117 r120  
    259259    _priority_ooo_engine = new generic::priority::Priority (_name+"_priority_ooo_engine",
    260260                                                            _param->_dispatch_priority      ,
    261                                                             _param->_dispatch_load_balancing,
     261//                                                          _param->_dispatch_load_balancing,
    262262                                                            _param->_nb_ooo_engine          ,
    263                                                             _param->_nb_inst_issue_slot     ,
     263//                                                          _param->_nb_inst_issue_slot     ,
    264264                                                            _param->_nb_ooo_engine         
    265265                                                            );
    266266
    267 //  _priority_ooo_engine  = new generic::priority::Priority * [_param->_nb_execute_loop];
    268267    _priority_read_unit   = new generic::priority::Priority * [_param->_nb_execute_loop];
    269 
    270268    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    271       {
    272 //         _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i),
    273 //                                                                     _param->_dispatch_priority      ,
    274 //                                                                     _param->_dispatch_load_balancing,
    275 //                                                                     _param->_execute_loop_nb_ooo_engine      [i],
    276 //                                                                     _param->_execute_loop_nb_inst_issue_slot [i],
    277 //                                                                     _param->_execute_loop_nb_ooo_engine      [i]
    278 //                                                                     );
    279 
    280269        _priority_read_unit  [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i),
    281270                                                                    // PRIORITY_STATIC,
     
    284273                                                                    _param->_nb_read_unit [i]
    285274                                                                    );
    286       }
    287 
    288 
    289275
    290276#ifdef POSITION
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_deallocation.cpp

    r117 r120  
    159159    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    160160    for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    161       {
    162 //      delete _priority_ooo_engine [i];
    163         delete _priority_read_unit  [i];
    164       }
    165 //  delete [] _priority_ooo_engine;
     161    delete    _priority_read_unit  [i];
    166162    delete [] _priority_read_unit ;
    167163    delete    _priority_ooo_engine;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp

    r118 r120  
    119119//       }
    120120
    121     for (uint32_t num_ooo_engine=0; num_ooo_engine<_param->_nb_ooo_engine; ++num_ooo_engine)
    122       for (uint32_t num_inst_issue_queue=0; num_inst_issue_queue<_param->_nb_inst_issue_queue[num_ooo_engine]; ++num_inst_issue_queue)
    123         {
    124           bool find = false;
    125 
    126           Tcontrol_t val  = PORT_READ(in_ISSUE_OOO_ENGINE_VAL  [num_ooo_engine][num_inst_issue_queue]);
    127           Ttype_t    type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]);
    128 
    129           log_printf(TRACE,Core_Glue,FUNCTION,"  * num_ooo_engine                : %d",num_ooo_engine      );
    130           log_printf(TRACE,Core_Glue,FUNCTION,"  * num_inst_issue_queue          : %d",num_inst_issue_queue);
    131           log_printf(TRACE,Core_Glue,FUNCTION,"    * val                         : %d",val);
    132           log_printf(TRACE,Core_Glue,FUNCTION,"    * type                        : %d",type);
    133 
    134           if (val)
    135             for (uint32_t num_inst_issue_slot=0; num_inst_issue_slot<_param->_nb_inst_issue_slot[num_ooo_engine]; ++num_inst_issue_slot)
     121//     for (uint32_t num_ooo_engine=0; num_ooo_engine<_param->_nb_ooo_engine; ++num_ooo_engine)
     122
     123    std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine->select();
     124    for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin();
     125         it_ooo_engine!=select_ooo_engine->end();
     126         ++it_ooo_engine)
     127      {
     128        uint32_t num_ooo_engine      = it_ooo_engine->grp;
     129
     130        for (uint32_t num_inst_issue_queue=0; num_inst_issue_queue<_param->_nb_inst_issue_queue[num_ooo_engine]; ++num_inst_issue_queue)
     131          {
     132            bool find = false;
     133           
     134            Tcontrol_t val  = PORT_READ(in_ISSUE_OOO_ENGINE_VAL  [num_ooo_engine][num_inst_issue_queue]);
     135            Ttype_t    type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]);
     136           
     137            log_printf(TRACE,Core_Glue,FUNCTION,"  * num_ooo_engine                : %d",num_ooo_engine      );
     138            log_printf(TRACE,Core_Glue,FUNCTION,"  * num_inst_issue_queue          : %d",num_inst_issue_queue);
     139            log_printf(TRACE,Core_Glue,FUNCTION,"    * val                         : %d",val);
     140            log_printf(TRACE,Core_Glue,FUNCTION,"    * type                        : %d",type);
     141           
     142            if (val)
     143              for (uint32_t num_inst_issue_slot=0; num_inst_issue_slot<_param->_nb_inst_issue_slot[num_ooo_engine]; ++num_inst_issue_slot)
     144                {
     145                  log_printf(TRACE,Core_Glue,FUNCTION,"    * num_inst_issue_slot         : %d",num_inst_issue_slot);
     146                 
     147                  // scan all read_unit
     148                 
     149                  if (SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot])
     150                    for (uint32_t num_execute_loop=0; num_execute_loop<_param->_nb_execute_loop; ++num_execute_loop)
     151                      {
     152                        std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[num_execute_loop]->select();
     153                        for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin();
     154                             it_read_unit!=select_read_unit->end();
     155                             ++it_read_unit)
     156                          {
     157                            // get the most priotary ...
     158                            uint32_t num_read_unit = it_read_unit->grp;
     159                            Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit];
     160                           
     161                            log_printf(TRACE,Core_Glue,FUNCTION,"      * num_execute_loop          : %d",num_execute_loop);
     162                            log_printf(TRACE,Core_Glue,FUNCTION,"      * num_read_unit             : %d",num_read_unit   );
     163                            log_printf(TRACE,Core_Glue,FUNCTION,"        * read_unit_enable        : %d",ack             );
     164                           
     165                            // test if :
     166                            //  * read_unit can accept an instruction (valid and no previous instruction)
     167                            //  * slot can issue an instruction at this read_unit
     168                            //  * read_unit can accept this type
     169                            if (ack and
     170                                _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and
     171                                _param->_table_issue_type [num_execute_loop][num_read_unit][type])
     172                              {
     173                                log_printf(TRACE,Core_Glue,FUNCTION,"  * find !!!");
     174                               
     175                                // find !
     176                                // Transaction
     177                                READ_UNIT_ENABLE       [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy
     178                                ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val
     179                                ISSUE_OOO_ENGINE_ACK   [num_ooo_engine][num_inst_issue_queue] = 1; // = ack
     180                                SLOT_ENABLE            [num_ooo_engine][num_inst_issue_slot]  = false; // now this slot is used
     181                                     
     182                                if (_param->_have_port_context_id)
     183                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [num_ooo_engine][num_inst_issue_queue]));
     184                                if (_param->_have_port_front_end_id)
     185                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [num_ooo_engine][num_inst_issue_queue]));
     186                                if (_param->_have_port_ooo_engine_id)
     187                                  {
     188                                Tcontext_t ooo_engine_id = _param->_translate_num_ooo_engine_to_execute_loop_ooo_engine_id [num_ooo_engine][num_execute_loop];
     189                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         [num_execute_loop][num_read_unit],ooo_engine_id);
     190                                  }
     191                                if (_param->_have_port_rob_ptr)
     192                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID             [num_ooo_engine][num_inst_issue_queue]));
     193                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION             [num_ooo_engine][num_inst_issue_queue]));
     194                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE                  [num_execute_loop][num_read_unit],type);
     195                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue]));
     196                                if (_param->_have_port_load_queue_ptr)
     197                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [num_ooo_engine][num_inst_issue_queue]));
     198                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [num_ooo_engine][num_inst_issue_queue]));
     199                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT              [num_ooo_engine][num_inst_issue_queue]));
     200                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA               [num_ooo_engine][num_inst_issue_queue]));
     201                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [num_ooo_engine][num_inst_issue_queue]));
     202                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB               [num_ooo_engine][num_inst_issue_queue]));
     203                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [num_ooo_engine][num_inst_issue_queue]));
     204                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC               [num_ooo_engine][num_inst_issue_queue]));
     205                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [num_ooo_engine][num_inst_issue_queue]));
     206                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD              [num_ooo_engine][num_inst_issue_queue]));
     207                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [num_ooo_engine][num_inst_issue_queue]));
     208                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE              [num_ooo_engine][num_inst_issue_queue]));
     209                                PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [num_ooo_engine][num_inst_issue_queue]));
     210                             
     211                               
     212                                find = true;
     213                                break;
     214                              }
     215                            //if (find)
     216                            //  break;
     217                          }
     218                        if (find)
     219                          break;
     220                      }
     221                  if (find)
     222                    break;
     223                }
     224           
     225            if (_param->_issue_queue_in_order [num_ooo_engine] and
     226                not find and
     227                (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine]))
    136228              {
    137                 log_printf(TRACE,Core_Glue,FUNCTION,"    * num_inst_issue_slot         : %d",num_inst_issue_slot);
     229                log_printf(TRACE,Core_Glue,FUNCTION,"  * stop scan !!!");
    138230               
    139                 // scan all read_unit
    140                
    141                 if (SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot])
    142                   for (uint32_t num_execute_loop=0; num_execute_loop<_param->_nb_execute_loop; ++num_execute_loop)
    143                     {
    144                       for (uint32_t _num_read_unit=0; _num_read_unit<_param->_nb_read_unit[num_execute_loop]; ++_num_read_unit)
    145                         {
    146                           uint32_t num_read_unit = (_num_read_unit+reg_PRIORITY)%_param->_nb_read_unit[num_execute_loop];
    147                           Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit];
    148                          
    149                           log_printf(TRACE,Core_Glue,FUNCTION,"      * num_execute_loop          : %d",num_execute_loop);
    150                           log_printf(TRACE,Core_Glue,FUNCTION,"      * num_read_unit             : %d",num_read_unit   );
    151                           log_printf(TRACE,Core_Glue,FUNCTION,"        * read_unit_enable        : %d",ack             );
    152                          
    153                           // test if :
    154                           //  * read_unit can accept an instruction (valid and no previous instruction)
    155                           //  * slot can issue an instruction at this read_unit
    156                           //  * read_unit can accept this type
    157                           if (ack and
    158                               _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and
    159                               _param->_table_issue_type [num_execute_loop][num_read_unit][type])
    160                             {
    161                               log_printf(TRACE,Core_Glue,FUNCTION,"  * find !!!");
    162 
    163                               // find !
    164                               // Transaction
    165                               READ_UNIT_ENABLE       [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy
    166                               ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val
    167                               ISSUE_OOO_ENGINE_ACK   [num_ooo_engine][num_inst_issue_queue] = 1; // = ack
    168                               SLOT_ENABLE            [num_ooo_engine][num_inst_issue_slot]  = false; // now this slot is used
    169                                      
    170                               if (_param->_have_port_context_id)
    171                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID            [num_ooo_engine][num_inst_issue_queue]));
    172                               if (_param->_have_port_front_end_id)
    173                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID          [num_ooo_engine][num_inst_issue_queue]));
    174                               if (_param->_have_port_ooo_engine_id)
    175                                 {
    176                               Tcontext_t ooo_engine_id = 0;
    177                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID         [num_execute_loop][num_read_unit],ooo_engine_id);
    178                                 }
    179                               if (_param->_have_port_rob_ptr)
    180                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID             [num_ooo_engine][num_inst_issue_queue]));
    181                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION             [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION             [num_ooo_engine][num_inst_issue_queue]));
    182                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE                  [num_execute_loop][num_read_unit],type);
    183                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue]));
    184                               if (_param->_have_port_load_queue_ptr)
    185                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE  [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE  [num_ooo_engine][num_inst_issue_queue]));
    186                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT          [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT          [num_ooo_engine][num_inst_issue_queue]));
    187                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT              [num_ooo_engine][num_inst_issue_queue]));
    188                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA               [num_ooo_engine][num_inst_issue_queue]));
    189                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA            [num_ooo_engine][num_inst_issue_queue]));
    190                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB               [num_ooo_engine][num_inst_issue_queue]));
    191                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB            [num_ooo_engine][num_inst_issue_queue]));
    192                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC               [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC               [num_ooo_engine][num_inst_issue_queue]));
    193                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC            [num_ooo_engine][num_inst_issue_queue]));
    194                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD              [num_ooo_engine][num_inst_issue_queue]));
    195                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD            [num_ooo_engine][num_inst_issue_queue]));
    196                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE              [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE              [num_ooo_engine][num_inst_issue_queue]));
    197                               PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE            [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE            [num_ooo_engine][num_inst_issue_queue]));
    198                              
    199                              
    200                               find = true;
    201                               break;
    202                             }
    203                           //if (find)
    204                           //  break;
    205                         }
    206                       if (find)
    207                         break;
    208                     }
    209                 if (find)
    210                   break;
     231                break; // stop scan
    211232              }
    212          
    213           if (_param->_issue_queue_in_order [num_ooo_engine] and
    214               not find and
    215               (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine]))
    216             {
    217               log_printf(TRACE,Core_Glue,FUNCTION,"  * stop scan !!!");
    218              
    219               break; // stop scan
    220             }
    221         }
     233          }
     234      }
    222235
    223236    // Write output
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_transition.cpp

    r118 r120  
    2424      {
    2525        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    26           {
    27 //          _priority_ooo_engine [i]->reset();
    28             _priority_read_unit  [i]->reset();
    29           }
     26          _priority_read_unit  [i]->reset();
    3027        _priority_ooo_engine->reset();
    31 
    32         reg_PRIORITY = 0;
    3328      }
    3429    else
     
    3631        // next priority
    3732        for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
    38           {
    39 //          _priority_ooo_engine [i]->transition();
    40             _priority_read_unit  [i]->transition();
    41           }
     33          _priority_read_unit  [i]->transition();
    4234        _priority_ooo_engine->transition();
    43 
    44         reg_PRIORITY ++;
    4535      }
    4636
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters.cpp

    r117 r120  
    9595        }
    9696
    97     ALLOC2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, uint32_t, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     97    ALLOC2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,uint32_t  ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     98    ALLOC2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id  ,Tcontext_t,_nb_ooo_engine,_nb_execute_loop);
     99
     100    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
     101      for (uint32_t j=0; j<_nb_execute_loop; ++j)
     102        _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [i][j] = _nb_ooo_engine;
     103
    98104    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    99105      for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j)
    100106        {
    101107          uint32_t num_ooo_engine  = _translate_execute_loop_num_ooo_engine [i][j];
     108
     109          _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [num_ooo_engine][i] = j;
     110
    102111          uint32_t execute_loop_id;
    103112          for (execute_loop_id = 0; execute_loop_id<_ooo_engine_nb_execute_loop[num_ooo_engine]; ++execute_loop_id)
     
    179188    log_begin(Core_Glue,FUNCTION);
    180189
    181     DELETE2(_execute_loop_nb_inst_issue_slot,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    182     DELETE2(_execute_loop_nb_inst_insert,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    183     DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    184     DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id,_nb_front_end);
    185     DELETE1(_link_ooo_engine_with_front_end,_nb_front_end);
     190    DELETE2(_execute_loop_nb_inst_issue_slot                         ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     191    DELETE2(_execute_loop_nb_inst_insert                             ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     192    DELETE2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id  ,_nb_ooo_engine,_nb_execute_loop);
     193    DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
     194    DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id      ,_nb_front_end);
     195    DELETE1(_link_ooo_engine_with_front_end                          ,_nb_front_end);
    186196
    187197    log_end(Core_Glue,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters_msg_error.cpp

    r88 r120  
    5757            test.error(toString(_("ooo_engine[%d][%d].nb_inst_execute must be equal at execute_loop[%d].nb_write_unit.\n"),num_ooo_engine,k,i));
    5858        }
     59
     60    if (_dispatch_load_balancing != LOAD_BALANCING_MAXIMUM_FOR_PRIORITY)
     61      test.error(toString(_("distpatch load_balancing scheme \"%s\" is not yet supported.\n"),toString(_dispatch_load_balancing).c_str()));
     62
    5963    log_end(Core_Glue,FUNCTION);
    6064
Note: See TracChangeset for help on using the changeset viewer.