Ignore:
Timestamp:
May 26, 2009, 9:01:47 PM (16 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
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/SelfTest/src/test.cpp

    r108 r120  
    3636  cout << "------------------------------------------------------" << endl;
    3737
    38   Instance * instance1 = new Instance ("../../../Files/Instance_min.cfg",
     38  Instance * instance1 = new Instance ("../../../Files/Instance_x1_w1_0.cfg",
    3939                                   generator1,
    4040                                   _get_custom_information
     
    4949  Configuration * configuration1 = new Configuration("../../../Files/Morpheo.sim",
    5050                                           "../../../Files/Morpheo.gen",
    51                                            "../../../Files/Instance_min.cfg",
     51                                           "../../../Files/Instance_x1_w1_0.cfg",
    5252                                           _get_custom_information);
    5353
     
    5959    cout << "------------------------------------------------------" << endl;
    6060
    61     Instance * instance = new Instance ("../../../Files/Instance_debug.cfg",
     61    Instance * instance = new Instance ("../../../Files/Instance_x2_w1_6.cfg",
    6262                                        generator1,
    6363                                        _get_custom_information
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/src/Configuration.cpp

    r114 r120  
    4646                fromString<uint32_t>         (_simulator->getParam("debug_idle_time")));
    4747
    48     log_init(fromString<bool>(_simulator->getParam("debug_have_log_file")),
     48    log_init(fromString<bool>(_simulator->getParam("debug_log_file_generate")),
     49             fromString<bool>(_simulator->getParam("debug_log_file_with_pid")),
    4950             MORPHEO_LOG);
    5051
  • 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
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h

    r88 r120  
    4040  public : bool    *** _table_routing                ; //[nb_execute_unit][nb_execute_unit_port][nb_write_unit]
    4141  public : bool     ** _table_thread                 ; //[nb_write_unit][nb_thread]
     42  public : bool      * _num_thread_valid             ; //[nb_thread]
    4243
    4344  public : uint32_t    _max_nb_execute_unit_port     ;
     
    7172                        bool    *** table_routing                ,
    7273                        bool     ** table_thread                 ,
     74                        bool      * num_thread_valid             , //[nb_thread]
    7375                        bool        is_toplevel=false
    7476                        );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Parameters.cpp

    r97 r120  
    3333                          bool    *** table_routing                ,//[nb_execute_unit][nb_execute_unit_port][nb_write_unit]
    3434                          bool     ** table_thread                 ,//[nb_write_unit][nb_thread]                           
     35                          bool      * num_thread_valid             ,//[nb_thread]
    3536                          bool        is_toplevel                  )
    3637  {
     
    4950    _table_routing           = table_routing       ;
    5051    _table_thread            = table_thread        ;
     52    _num_thread_valid        = num_thread_valid    ;
    5153
    5254    _max_nb_execute_unit_port= max<uint32_t>(_nb_execute_unit_port, _nb_execute_unit);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h

    r88 r120  
    4444  public : bool     ** _table_execute_type     ; //[nb_execute_unit][nb_type]
    4545  public : bool     ** _table_execute_thread   ; //[nb_execute_unit][nb_thread]
     46  public : bool      * _num_thread_valid       ; //[nb_thread]
    4647
    4748  public : uint32_t    _max_nb_read_unit_port  ;
     
    8384                        bool     ** table_execute_type     ,
    8485                        bool     ** table_execute_thread   ,
     86                        bool      * num_thread_valid       ,
    8587                        bool        is_toplevel=false      );
    8688//   public : Parameters  (Parameters & param) ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp

    r109 r120  
    3838                          bool     ** table_execute_type     ,
    3939                          bool     ** table_execute_thread   ,
     40                          bool      * num_thread_valid       ,
    4041                          bool        is_toplevel            )
    4142  {
     
    5657    _table_execute_type      = table_execute_type  ;
    5758    _table_execute_thread    = table_execute_thread;
     59    _num_thread_valid        = num_thread_valid    ;
    5860
    5961    log_printf(TRACE,Read_unit_to_Execution_unit,FUNCTION,"  * table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port]");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp

    r109 r120  
    4141    // TYPE_BRANCH  |     X     |            |            |
    4242    // TYPE_MEMORY  |           |            |     X      |
    43    
    4443    bool type_present [_nb_thread][_nb_type];
    4544    for (uint32_t i=0; i<_nb_thread; i++)
     
    4948    for (uint32_t i=0; i<_nb_execute_unit; i++)
    5049      for (uint32_t j=0; j<_nb_thread; j++)
    51         if (_table_execute_thread [i][j] == true)
     50        if (_num_thread_valid [j] and
     51            (_table_execute_thread [i][j] == true))
    5252          // this execute_unit execute this thread !
    5353          for (Ttype_t k=0; k<_nb_type; k++)
     
    6666      if (not is_type_valid(j))
    6767        for (uint32_t i=0; i<_nb_thread; i++)
    68           if (type_present [i][j])
     68          if (_num_thread_valid [j] and
     69              (type_present [i][j]))
    6970            test.error(toString(_("The thread '%d' can execute the type's operation '%s' but this type is invalid.\n"),i,toString(j).c_str()));
    7071
     
    7273      if (is_type_valid(j) and not is_type_optionnal(j))
    7374        for (uint32_t i=0; i<_nb_thread; i++)
    74           if (not type_present [i][j])
     75          if (_num_thread_valid [i] and
     76              (not type_present [i][j]))
    7577            test.error(toString(_("The thread '%d' can't access at the execute_unit to execute the type's operation '%s' (and this type is not optional !).\n"),i,toString(j).c_str()));
    7678           
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h

    r115 r120  
    103103  public : uint32_t            * _translate_num_execute_unit                    ; //[nb_execute_unit]
    104104
     105  public : bool                * _num_thread_valid                              ; //[nb_thread]
     106
    105107  public : uint32_t              _nb_execute_unit              ;
    106108  public : uint32_t            * _nb_execute_unit_port         ;
     
    198200                        uint32_t            * translate_num_execute_unit                    ,//[nb_execute_unit]
    199201
     202                        bool                * num_thread_valid                              ,//[nb_thread]
     203
    200204                        bool                  is_toplevel=false
    201205                        );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp

    r117 r120  
    7373                          bool                * is_load_store_unit                        ,//[nb_execute_unit]
    7474                          uint32_t            * translate_num_execute_unit                ,//[nb_execute_unit]
     75
     76                          bool                * num_thread_valid                          ,//[nb_thread]
    7577                         
    7678                          bool                  is_toplevel
     
    133135    _translate_num_execute_unit                 = translate_num_execute_unit;
    134136
     137    _num_thread_valid                           = num_thread_valid;
     138
    135139    _nb_execute_unit                            = _nb_functionnal_unit + _nb_load_store_unit;
    136140
     
    481485       _read_unit_to_execution_unit_table_routing     ,
    482486       _read_unit_to_execution_unit_table_execute_type,
    483        _read_unit_to_execution_unit_table_thread      );
     487       _read_unit_to_execution_unit_table_thread      ,
     488       _num_thread_valid);
    484489   
    485490    log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : execution_unit_to_write_unit");
     
    499504       _execution_unit_to_write_unit_priority     ,
    500505       _execution_unit_to_write_unit_table_routing,
    501        _execution_unit_to_write_unit_table_thread );
     506       _execution_unit_to_write_unit_table_thread ,
     507       _num_thread_valid);
    502508     
    503509    log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : register_unit");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h

    r119 r120  
    5252#ifdef STATISTICS
    5353  public    : Stat                           * _stat;
     54  private   : counter_t                     ** _stat_nb_cycle_state_ok                     ; //[nb_context]
     55  private   : counter_t                     ** _stat_nb_cycle_state_ko_excep               ; //[nb_context]
     56  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_branch         ; //[nb_context]
     57  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load           ; //[nb_context]
     58  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load_and_branch; //[nb_context]
     59  private   : counter_t                     ** _stat_nb_cycle_state_ko_msync               ; //[nb_context]
     60  private   : counter_t                     ** _stat_nb_cycle_state_ko_psync               ; //[nb_context]
     61  private   : counter_t                     ** _stat_nb_cycle_state_ko_csync               ; //[nb_context]
     62  private   : counter_t                     ** _stat_nb_cycle_state_ko_spr                 ; //[nb_context]
    5463#endif
    5564
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h

    r119 r120  
    2929      CONTEXT_STATE_KO_EXCEP_ADDR                      , // update address manager
    3030      CONTEXT_STATE_KO_EXCEP_SPR                       , // update spr (epc, esr, sr[DSX])
    31 //       CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR           , // update address manager
    32 //       CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE    , // branch is complete, wait update by update_prediction_table
    3331      CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE         , // branch is complete, wait update by update_prediction_table
    3432      CONTEXT_STATE_KO_MISS_BRANCH_ADDR                , // update address manager
     
    6866      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_ADDR                       : return "context_state_ko_excep_addr"                      ; break;
    6967      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_SPR                        : return "context_state_ko_excep_spr"                       ; break;
    70 //       case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE     : return "context_state_ko_miss_branch_fast_wait_update"    ; break;
    71 //       case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR            : return "context_state_ko_miss_branch_fast_addr"           ; break;
    7268      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE          : return "context_state_ko_miss_branch_wait_update"         ; break;
    7369      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR                 : return "context_state_ko_miss_branch_addr"                ; break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_allocation.cpp

    r83 r120  
    88
    99#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
     10#include "Behavioural/include/Allocation.h"
    1011
    1112namespace morpheo {
     
    2627                      "Context_State",
    2728                      param_statistics);
    28    
     29
     30    ALLOC1(_stat_nb_cycle_state_ok                     ,counter_t *,_param->_nb_context);
     31    ALLOC1(_stat_nb_cycle_state_ko_excep               ,counter_t *,_param->_nb_context);
     32    ALLOC1(_stat_nb_cycle_state_ko_miss_branch         ,counter_t *,_param->_nb_context);
     33    ALLOC1(_stat_nb_cycle_state_ko_miss_load           ,counter_t *,_param->_nb_context);
     34    ALLOC1(_stat_nb_cycle_state_ko_miss_load_and_branch,counter_t *,_param->_nb_context);
     35    ALLOC1(_stat_nb_cycle_state_ko_msync               ,counter_t *,_param->_nb_context);
     36    ALLOC1(_stat_nb_cycle_state_ko_psync               ,counter_t *,_param->_nb_context);
     37    ALLOC1(_stat_nb_cycle_state_ko_csync               ,counter_t *,_param->_nb_context);
     38    ALLOC1(_stat_nb_cycle_state_ko_spr                 ,counter_t *,_param->_nb_context);
     39
     40    for (uint32_t i=0; i<_param->_nb_context; ++i)
     41      {
     42        _stat_nb_cycle_state_ok                      [i] = _stat->create_counter("nb_cycle_state_ok_"                     +toString(i),"",toString(_("Number of cycle in state ok                      (context %d)"),i));
     43        _stat_nb_cycle_state_ko_excep                [i] = _stat->create_counter("nb_cycle_state_ko_excep_"               +toString(i),"",toString(_("Number of cycle in state ko_excep                (context %d)"),i));
     44        _stat_nb_cycle_state_ko_miss_branch          [i] = _stat->create_counter("nb_cycle_state_ko_miss_branch_"         +toString(i),"",toString(_("Number of cycle in state ko_miss_branch          (context %d)"),i));
     45        _stat_nb_cycle_state_ko_miss_load            [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_"           +toString(i),"",toString(_("Number of cycle in state ko_miss_load            (context %d)"),i));
     46        _stat_nb_cycle_state_ko_miss_load_and_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"",toString(_("Number of cycle in state ko_miss_load_and_branch (context %d)"),i));
     47        _stat_nb_cycle_state_ko_msync                [i] = _stat->create_counter("nb_cycle_state_ko_msync_"               +toString(i),"",toString(_("Number of cycle in state ko_msync                (context %d)"),i));
     48        _stat_nb_cycle_state_ko_psync                [i] = _stat->create_counter("nb_cycle_state_ko_psync_"               +toString(i),"",toString(_("Number of cycle in state ko_psync                (context %d)"),i));
     49        _stat_nb_cycle_state_ko_csync                [i] = _stat->create_counter("nb_cycle_state_ko_csync_"               +toString(i),"",toString(_("Number of cycle in state ko_csync                (context %d)"),i));
     50        _stat_nb_cycle_state_ko_spr                  [i] = _stat->create_counter("nb_cycle_state_ko_spr_"                 +toString(i),"",toString(_("Number of cycle in state ko_spr                  (context %d)"),i));
     51
     52
     53        _stat->create_expr_percent("percent_state_ok_"                     +toString(i),"nb_cycle_state_ok_"                     +toString(i),"cycle",toString(_("Percent of cycle in state ok                      (context %d)"),i));
     54        _stat->create_expr_percent("percent_state_ko_excep_"               +toString(i),"nb_cycle_state_ko_excep_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_excep                (context %d)"),i));
     55        _stat->create_expr_percent("percent_state_ko_miss_branch_"         +toString(i),"nb_cycle_state_ko_miss_branch_"         +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_branch          (context %d)"),i));
     56        _stat->create_expr_percent("percent_state_ko_miss_load_"           +toString(i),"nb_cycle_state_ko_miss_load_"           +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load            (context %d)"),i));
     57        _stat->create_expr_percent("percent_state_ko_miss_load_and_branch_"+toString(i),"nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load_and_branch (context %d)"),i));
     58        _stat->create_expr_percent("percent_state_ko_msync_"               +toString(i),"nb_cycle_state_ko_msync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_msync                (context %d)"),i));
     59        _stat->create_expr_percent("percent_state_ko_psync_"               +toString(i),"nb_cycle_state_ko_psync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_psync                (context %d)"),i));
     60        _stat->create_expr_percent("percent_state_ko_csync_"               +toString(i),"nb_cycle_state_ko_csync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_csync                (context %d)"),i));
     61        _stat->create_expr_percent("percent_state_ko_spr_"                 +toString(i),"nb_cycle_state_ko_spr_"                 +toString(i),"cycle",toString(_("Percent of cycle in state ko_spr                  (context %d)"),i));
     62      }
     63
    2964    log_end(Context_State,FUNCTION);
    3065  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_deallocation.cpp

    r83 r120  
    88
    99#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
     10#include "Behavioural/include/Allocation.h"
    1011
    1112namespace morpheo {
     
    2425
    2526    log_printf(INFO,Context_State,FUNCTION,_("Generate Statistics file"));
    26    
     27
    2728    delete _stat;
     29
     30    DELETE1(_stat_nb_cycle_state_ok                     ,_param->_nb_context);
     31    DELETE1(_stat_nb_cycle_state_ko_excep               ,_param->_nb_context);
     32    DELETE1(_stat_nb_cycle_state_ko_miss_branch         ,_param->_nb_context);
     33    DELETE1(_stat_nb_cycle_state_ko_miss_load           ,_param->_nb_context);
     34    DELETE1(_stat_nb_cycle_state_ko_miss_load_and_branch,_param->_nb_context);
     35    DELETE1(_stat_nb_cycle_state_ko_msync               ,_param->_nb_context);
     36    DELETE1(_stat_nb_cycle_state_ko_psync               ,_param->_nb_context);
     37    DELETE1(_stat_nb_cycle_state_ko_csync               ,_param->_nb_context);
     38    DELETE1(_stat_nb_cycle_state_ko_spr                 ,_param->_nb_context);
    2839   
    2940    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp

    r119 r120  
    678678      }
    679679
     680
     681#ifdef STATISTICS
     682    if (usage_is_set(_usage,USE_STATISTICS))
     683      for (uint32_t i=0; i<_param->_nb_context; ++i)
     684        switch(reg_STATE[i])
     685          {
     686          case CONTEXT_STATE_OK                                 : (*_stat_nb_cycle_state_ok                      [i])++; break;
     687
     688          case CONTEXT_STATE_KO_EXCEP                           :
     689          case CONTEXT_STATE_KO_EXCEP_ADDR                      :
     690          case CONTEXT_STATE_KO_EXCEP_SPR                       : (*_stat_nb_cycle_state_ko_excep                [i])++; break;
     691
     692          case CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE         :
     693          case CONTEXT_STATE_KO_MISS_BRANCH_ADDR                :
     694          case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND             : (*_stat_nb_cycle_state_ko_miss_branch          [i])++; break;
     695
     696          case CONTEXT_STATE_KO_MISS_LOAD_ADDR                  :
     697          case CONTEXT_STATE_KO_MISS_LOAD_WAITEND               : (*_stat_nb_cycle_state_ko_miss_load            [i])++; break;
     698
     699          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE:
     700          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR       :
     701          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND    : (*_stat_nb_cycle_state_ko_miss_load_and_branch [i])++; break;
     702
     703//        case CONTEXT_STATE_KO_MSYNC                           :
     704//        case CONTEXT_STATE_KO_MSYNC_ISSUE                     :
     705          case CONTEXT_STATE_KO_MSYNC_EXEC                      : (*_stat_nb_cycle_state_ko_msync                [i])++; break;
     706
     707//        case CONTEXT_STATE_KO_PSYNC                           :
     708          case CONTEXT_STATE_KO_PSYNC_FLUSH                     :
     709          case CONTEXT_STATE_KO_PSYNC_ADDR                      : (*_stat_nb_cycle_state_ko_psync                [i])++; break;
     710
     711//        case CONTEXT_STATE_KO_CSYNC                           :
     712          case CONTEXT_STATE_KO_CSYNC_FLUSH                     :
     713          case CONTEXT_STATE_KO_CSYNC_ADDR                      : (*_stat_nb_cycle_state_ko_csync                [i])++; break;
     714
     715//        case CONTEXT_STATE_KO_SPR                             :
     716//        case CONTEXT_STATE_KO_SPR_ISSUE                       :
     717          case CONTEXT_STATE_KO_SPR_EXEC                        : (*_stat_nb_cycle_state_ko_spr                  [i])++; break;
     718          }
     719#endif
     720
     721
     722
    680723#if DEBUG >= DEBUG_TRACE
    681724    for (uint32_t i=0; i<_param->_nb_context; i++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp

    r119 r120  
    202202
    203203//                  can_continue [x] = false; // one branch per context, the DS don't execute
    204                     can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute
     204                    can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute
    205205                    have_decod_branch [x] = true;
    206                   }
     206                   
     207                    log_printf(TRACE,Decod,FUNCTION,"      * predict_can_continue   : %d",PORT_READ(in_PREDICT_CAN_CONTINUE [i]));
     208                  }
    207209
    208210                Tevent_type_t event_type = _decod_instruction->_event_type;
     
    245247
    246248                can_continue [x] &= have_transaction; // to have a in order decod !!! if a previous instruction can decod, also next instruction can't decod.
     249
     250                log_printf(TRACE,Decod,FUNCTION,"      * have_transaction       : %d",have_transaction);
     251
    247252              }
    248253
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h

    r111 r120  
    3434  public : uint32_t   _size_history              ;
    3535  public : uint32_t * _size_ras_index            ; // [nb_context]
    36   public : const bool _not_accurate_block_predict;
    3736  public : uint32_t   _nb_thread                          ;
    3837  public : uint32_t * _translate_num_context_to_num_thread;//[nb_context]                   
     38  public : const bool _accurate_block_predict    ;
     39  public : const bool _accurate_block_decod      ;
    3940
    4041//public : uint32_t   _size_context_id           ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp

    r111 r120  
    3434                          uint32_t * translate_num_context_to_num_thread ,//[nb_context]
    3535                          bool       is_toplevel):
    36     _not_accurate_block_predict (false)
     36    _accurate_block_predict (false),
     37    _accurate_block_decod   (false)
    3738  {
    3839    log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp

    r119 r120  
    88#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h"
    99#include "Behavioural/include/Allocation.h"
     10#include "Common/include/Filename.h"
    1011
    1112namespace morpheo                    {
     
    250251      if (_param->_have_thread [i])
    251252        {
    252           std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Branchement_prediction-thread_"+toString(i)+".log";
     253          std::string filename = morpheo::filename(MORPHEO_LOG,
     254                                                   "Branchement_prediction-thread_"+toString(i),
     255                                                   "",
     256                                                   "log",
     257                                                   false,
     258                                                   log_with_pid,
     259                                                   false);
    253260         
    254261          branchement_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp

    r110 r120  
    3333
    3434        Tcontext_t    context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
    35         bool          is_accurate = reg_IS_ACCURATE [context];
     35        bool          is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context];
    3636        event_state_t event_state = reg_EVENT_STATE [context];
    3737        uint32_t      ptr_write   = reg_UPT_TOP     [context];
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp

    r88 r120  
    4545        PORT_WRITE(out_PREDICT_UPDATE_PREDICTION_ID [i], internal_PREDICT_UPDATE_PREDICTION_ID [i]);
    4646
    47         bool is_accurate = not _param->_not_accurate_block_predict or reg_IS_ACCURATE[context];
     47        bool is_accurate = _param->_accurate_block_predict or reg_IS_ACCURATE[context];
    4848
    4949        // Ack if :
     
    5252        //  * is_accurate
    5353        internal_PREDICT_ACK [i] = ((reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state == UPDATE_FETCH_PREDICTION_STATE_EMPTY) and
    54 //                                  PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]) and
    55                                     (reg_EVENT_STATE [context] == EVENT_STATE_OK) and
     54                                    (reg_EVENT_STATE [context] == EVENT_STATE_OK) and
     55//                                  (reg_UFPT_NB_UPDATE [context] == 0) and
    5656                                    is_accurate);
    5757
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r119 r120  
    203203              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state        = UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD;
    204204
    205               Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]);
    206 
     205              Tbranch_condition_t condition   = PORT_READ(in_PREDICT_BTB_CONDITION [i]);
     206              bool                is_accurate = _param->_accurate_block_predict or PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]);
    207207              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._condition    = condition;
    208208              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_src  = PORT_READ(in_PREDICT_BTB_ADDRESS_SRC  [i]);
    209209              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_dest = PORT_READ(in_PREDICT_BTB_ADDRESS_DEST [i]);
    210210              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._last_take    = PORT_READ(in_PREDICT_BTB_LAST_TAKE    [i]);
    211               reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate  = PORT_READ(in_PREDICT_BTB_IS_ACCURATE  [i]);
     211              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate  = is_accurate;
    212212              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._history      = (_param->_have_port_history)?PORT_READ(in_PREDICT_DIR_HISTORY [i]):0;
    213213              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_ras  = PORT_READ(in_PREDICT_RAS_ADDRESS      [i]);
     
    263263                  // Have a miss !!!
    264264                  condition   = PORT_READ(in_DECOD_BTB_CONDITION [i]);
    265                   is_accurate = PORT_READ(in_DECOD_IS_ACCURATE   [i]);
     265                  is_accurate = _param->_accurate_block_decod or PORT_READ(in_DECOD_IS_ACCURATE   [i]);
    266266
    267267                  // if can_continue else don't wait the end of all instruction
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp

    r118 r120  
    99#include "Behavioural/include/Allocation.h"
    1010#include "Common/include/Max.h"
     11#include "Common/include/Filename.h"
    1112
    1213namespace morpheo                    {
     
    342343      if (_param->_have_thread [i])
    343344        {
    344           std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Instruction_flow-thread_"+toString(i)+".log";
     345          std::string filename = morpheo::filename(MORPHEO_LOG,
     346                                                   "Instruction_flow-thread_"+toString(i),
     347                                                   "",
     348                                                   "log",
     349                                                   false,
     350                                                   log_with_pid,
     351                                                   false);
    345352         
    346353          instruction_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_rename.cpp

    r88 r120  
    2424    log_function(OOO_Engine_Glue,FUNCTION,_name.c_str());
    2525
    26     for (uint32_t i=0; i<_param->_nb_rename_unit; ++i)
     26    for (uint32_t i=0; i<_param->_nb_front_end; ++i)
    2727      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j)
    28         // if have not front_end_id port, this function is not use
    29         PORT_WRITE(out_RENAME_RENAME_UNIT_FRONT_END_ID [i][j],_param->_translate_front_end_id_to_rename_unit [PORT_READ(in_RENAME_FRONT_END_ID [i][j])]);
    30    
     28        {
     29          // if have not front_end_id port, this function is not use
     30          PORT_WRITE(out_RENAME_RENAME_UNIT_FRONT_END_ID [i][j],_param->_translate_front_end_id_to_rename_unit [PORT_READ(in_RENAME_FRONT_END_ID [i][j])]);
     31        }
     32
    3133    log_end(OOO_Engine_Glue,FUNCTION);
    3234  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_allocation.cpp

    r117 r120  
    411411          uint32_t x = 0;
    412412          for (uint32_t j=0; j<_param->_nb_front_end; j++)
    413             if (i == *it)
     413            if (j == *it)
    414414              {
    415415                // this front end is link with this rename_unit
     
    486486                    if (_param->_have_port_front_end_id)
    487487                    COMPONENT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+            "_FRONT_END_ID" ,
    488                                              dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_RENAME_UNIT_FRONT_END_ID" );
     488                                             dest,"out_RENAME_"   +toString(j)+"_"+toString(k)+"_RENAME_UNIT_FRONT_END_ID" );
    489489                  }
    490490
     
    658658          uint32_t x = 0;
    659659          for (uint32_t j=0; j<_param->_nb_front_end; j++)
    660             if (i == (*it))
     660            if (j == (*it))
    661661              {
    662662                for (uint32_t k=0; k<_param->_nb_context[i]; k++)
     
    685685          uint32_t x = 0;
    686686          for (uint32_t j=0; j<_param->_nb_front_end; j++)
    687             if (i == *it)
     687            if (j == *it)
    688688              {
    689689                for (uint32_t k=0; k<_param->_nb_context[j]; k++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/Parameters.cpp

    r117 r120  
    132132    test();
    133133
     134    log_printf(TRACE,OOO_Engine,FUNCTION,"  * link_front_end_with_rename_unit");
    134135    _link_front_end_with_rename_unit = new std::vector<uint32_t> [_nb_rename_unit];
    135136    for (uint32_t i=0; i<_nb_front_end; i++)
    136       _link_front_end_with_rename_unit[_link_rename_unit_with_front_end[i]].push_back(i);
    137 
     137      {
     138        uint32_t num_rename_unit = _link_rename_unit_with_front_end[i];
     139
     140        log_printf(TRACE,OOO_Engine,FUNCTION,"    front_end %d is link with rename_unit %d with id %d",i,num_rename_unit,_link_front_end_with_rename_unit[num_rename_unit].size());
     141
     142        _link_front_end_with_rename_unit[num_rename_unit].push_back(i);
     143      }
    138144    _rename_unit_size_front_end_id                = new uint32_t    [_nb_rename_unit];
    139145    _rename_unit_size_context_id                  = new uint32_t    [_nb_rename_unit];
     
    172178    for (uint32_t i=0; i<_nb_rename_unit; i++)
    173179      {
    174         log_printf(TRACE,OOO_Engine,FUNCTION,"Rename_unit [%d]",i);
    175         log_printf(TRACE,OOO_Engine,FUNCTION," * front_end : %d",_rename_unit_nb_front_end[i]);
     180        log_printf(TRACE,OOO_Engine,FUNCTION,"  * Rename_unit [%d]",i);
     181        log_printf(TRACE,OOO_Engine,FUNCTION,"    * front_end : %d",_rename_unit_nb_front_end[i]);
    176182       
    177183        for (uint32_t j=0; j<_rename_unit_nb_front_end[i]; j++)
    178184          {
    179             log_printf(TRACE,OOO_Engine,FUNCTION,"   * [%d] nb_context : %d, nb_inst_decod : %d",j,_rename_unit_nb_context[i][j],_rename_unit_nb_inst_decod[i][j]);
     185            log_printf(TRACE,OOO_Engine,FUNCTION,"      * [%d] nb_context : %d, nb_inst_decod : %d",j,_rename_unit_nb_context[i][j],_rename_unit_nb_inst_decod[i][j]);
    180186
    181187            for (uint32_t k=0; k<_rename_unit_nb_context[i][j]; ++k)
    182               log_printf(TRACE,OOO_Engine,FUNCTION,"     * [%d][%d] link_lsq : %d",j,k,_rename_unit_link_load_store_unit_with_thread[i][j][k]);
     188              log_printf(TRACE,OOO_Engine,FUNCTION,"        * [%d][%d] link_lsq : %d",j,k,_rename_unit_link_load_store_unit_with_thread[i][j][k]);
    183189          }
    184190      }
     
    203209        _sum_inst_retire += _nb_inst_retire [i];
    204210
    205         log_printf(TRACE,OOO_Engine,FUNCTION,"rename_unit [%d] - nb_inst_insert %d, nb_inst_retire %d", i,_nb_inst_insert [i],_nb_inst_retire [i]);
     211        log_printf(TRACE,OOO_Engine,FUNCTION,"  * rename_unit [%d] - nb_inst_insert %d, nb_inst_retire %d", i,_nb_inst_insert [i],_nb_inst_retire [i]);
    206212      }
    207213   
    208     log_printf(TRACE,OOO_Engine,FUNCTION,"sum_inst_insert %d, sum_inst_retire %d",_sum_inst_insert,_sum_inst_retire);
     214    log_printf(TRACE,OOO_Engine,FUNCTION,"  * sum_inst_insert %d, sum_inst_retire %d",_sum_inst_insert,_sum_inst_retire);
    209215
    210216//  _have_port_front_end_id            = _size_front_end_id   > 0;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/include/Parameters.h

    r117 r120  
    303303  public : bool                 ** _execute_loop_is_load_store_unit                        ;//[nb_execute_loop][nb_execute_unit]
    304304  public : uint32_t             ** _execute_loop_translate_num_execute_unit                ;//[nb_execute_loop][nb_execute_unit]
     305  public : bool                 ** _execute_loop_num_thread_valid                          ;//[nb_execute_loop][execute_loop_nb_thread]
    305306
    306307  // translate for icache_access
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp

    r117 r120  
    2020                                                      uint32_t num_thread)
    2121  {
    22     log_printf(TRACE,Core,FUNCTION,_("execute_loop_get_num_thread"));
    23     log_printf(TRACE,Core,FUNCTION,_("  * Parameters :"));
     22    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_get_num_thread"));
    2423    log_printf(TRACE,Core,FUNCTION,_("    * num_execute_loop : %d"),num_execute_loop);
    2524    log_printf(TRACE,Core,FUNCTION,_("    * num_thread       : %d"),num_thread);
     
    3837    uint32_t front_end_id ;
    3938    uint32_t ooo_engine_id;
    40    
     39
    4140    //  * compute
    4241    for (ooo_engine_id=0; ooo_engine_id<_execute_loop_nb_ooo_engine [num_execute_loop]; ++ooo_engine_id)
     
    4443        break;
    4544   
    46 #ifdef DEBUG_TEST
    4745    if (ooo_engine_id == _execute_loop_nb_ooo_engine [num_execute_loop])
    48       throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : ooo_engine [%d] is not find."),num_execute_loop,num_ooo_engine));
    49 #endif
     46      return static_cast<Tcontext_t>(-1);
    5047
    5148    log_printf(TRACE,Core,FUNCTION,_("    * ooo_engine_id    : %d"),ooo_engine_id);
     
    5552        break;
    5653   
    57 #ifdef DEBUG_TEST
    5854    if (front_end_id == _execute_loop_nb_front_end [num_execute_loop])
    59       throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : front_end [%d] is not find."),num_execute_loop,num_front_end));
    60 #endif
     55      return static_cast<Tcontext_t>(-1);
    6156
    6257    log_printf(TRACE,Core,FUNCTION,_("    * front_end_id     : %d"),front_end_id );
    63    
     58
     59    Tcontext_t _return = get_num_thread(context_id   , log2(_execute_loop_nb_context    [num_execute_loop]),
     60                                        front_end_id , log2(_execute_loop_nb_front_end  [num_execute_loop]),
     61                                        ooo_engine_id, log2(_execute_loop_nb_ooo_engine [num_execute_loop]));
     62
     63    log_printf(TRACE,Core,FUNCTION,_("    * return           : %d"),_return);
     64
    6465    // compute the thread number
    65     return get_num_thread(context_id   , (1<<_execute_loop_nb_context    [num_execute_loop]),
    66                           front_end_id , (1<<_execute_loop_nb_front_end  [num_execute_loop]),
    67                           ooo_engine_id, (1<<_execute_loop_nb_ooo_engine [num_execute_loop]));
     66    return _return;
    6867  }
    6968
     
    376375
    377376    log_printf(TRACE,Core,FUNCTION,_("Core parameters :"));
     377
     378    log_printf(TRACE,Core,FUNCTION,_("  * nb_thread : %d"),_nb_thread);
    378379
    379380    // inverse link
     
    436437      for (uint32_t j=0; j<_nb_execute_unit[i]; ++j)
    437438        {
    438           log_printf(TRACE,Core,FUNCTION,_(" * execute_unit [%d][%d] : functionnal_unit [%d] - load_store_unit [%d]"),i,j,_link_functionnal_unit_with_execute_unit [i][j],_link_load_store_unit_with_execute_unit [i][j]);
     439          log_printf(TRACE,Core,FUNCTION,_("  * execute_unit [%d][%d] : functionnal_unit [%d] - load_store_unit [%d]"),i,j,_link_functionnal_unit_with_execute_unit [i][j],_link_load_store_unit_with_execute_unit [i][j]);
    439440         
    440441
     
    742743      }
    743744
    744 //     log_printf(TRACE,Core,FUNCTION,_(" * front_end_instruction_implemeted"));
     745//     log_printf(TRACE,Core,FUNCTION,_("  * front_end_instruction_implemeted"));
    745746//     for (uint32_t i=0; i<_nb_front_end; ++i)
    746747//       for (uint32_t j=0; j<_nb_context[i]; ++j)
     
    824825
    825826    ALLOC1(_ooo_engine_nb_front_end                       ,uint32_t         ,_nb_ooo_engine);
     827
     828    log_printf(TRACE,Core,FUNCTION,_("  * ooo_engine_nb_front_end"));
    826829   
    827830    {
     
    837840          uint32_t num_rename_bloc = _link_rename_bloc_with_front_end [i];
    838841          uint32_t num_ooo_engine  = _link_rename_unit_with_rename_bloc [num_rename_bloc].first;
    839 
     842       
     843          log_printf(TRACE,Core,FUNCTION,_("    * num_front_end             : %d"),i);
     844          log_printf(TRACE,Core,FUNCTION,_("      * num_rename_bloc         : %d"),num_rename_bloc);
     845          log_printf(TRACE,Core,FUNCTION,_("      * num_ooo_engine          : %d"),num_ooo_engine );
     846          log_printf(TRACE,Core,FUNCTION,_("      * ooo_engine_nb_front_end : %d"),_ooo_engine_nb_front_end [num_ooo_engine]);
    840847           // insert a new front_end
    841848          _ooo_engine_nb_front_end [num_ooo_engine] ++; // === list_front_end.size()
     
    843850        }
    844851
    845       log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_front_end"));
     852      log_printf(TRACE,Core,FUNCTION,_("  * translate_ooo_engine_num_front_end"));
    846853     
    847854      ALLOC2(_translate_ooo_engine_num_front_end            ,uint32_t         ,_nb_ooo_engine,_ooo_engine_nb_front_end[it1]);
    848855      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    849         for (uint32_t j=0; j<_ooo_engine_nb_front_end[i];++j)
    850           {
    851             uint32_t num_front_end = list_front_end[i][j];
     856        {
     857//           log_printf(TRACE,Core,FUNCTION,_("   %d -> %d"),i,_ooo_engine_nb_front_end[i]);
     858             
     859          for (uint32_t j=0; j<_ooo_engine_nb_front_end[i] ;++j)
     860            {
     861              uint32_t num_front_end = list_front_end[i][j];
    852862           
    853             log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> %d"),i,j,num_front_end);
    854             _translate_ooo_engine_num_front_end [i][j++] = num_front_end;
    855           }
     863              log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> %d"),i,j,num_front_end);
     864             
     865              _translate_ooo_engine_num_front_end [i][j] = num_front_end;
     866            }
     867        }
    856868    }
    857869
     
    891903        }
    892904
    893       log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_execute_loop"));
     905      log_printf(TRACE,Core,FUNCTION,_("  * translate_ooo_engine_num_execute_loop"));
    894906     
    895907      ALLOC2(_translate_ooo_engine_num_execute_loop         ,uint32_t         ,_nb_ooo_engine,_ooo_engine_nb_execute_loop[it1]);
     
    10111023    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    10121024      {
    1013 //         log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i);
     1025//         log_printf(TRACE,Core,FUNCTION,_("  * ooo_engine_table_issue_type [%d]"),i);
    10141026
    10151027        // Init
     
    11111123          }
    11121124
    1113         log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_routing [%d]"),i);
     1125        log_printf(TRACE,Core,FUNCTION,_("  * ooo_engine_table_routing [%d]"),i);
    11141126        for (uint32_t j=0; j<_nb_rename_unit[i]; ++j)
    11151127          {
     
    11491161      }
    11501162   
    1151     log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]"));
     1163    log_printf(TRACE,Core,FUNCTION,_("  * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]"));
    11521164    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    11531165      for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
     
    11591171    ALLOC3(_network_table_issue_type,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_type);
    11601172
    1161     log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type"));
     1173    log_printf(TRACE,Core,FUNCTION,_("  * network_table_issue_type"));
    11621174    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    11631175      for (uint32_t j=0; j<_nb_read_unit[i]; ++j)
     
    13831395        _execute_loop_nb_ooo_engine [i] = _list_ooo_engine_with_execute_loop[i].size();
    13841396   
    1385         log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_ooo_engine : %d"),_execute_loop_nb_ooo_engine [i]);
     1397        log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_ooo_engine : %d"),_execute_loop_nb_ooo_engine [i]);
    13861398   
    13871399        uint32_t max_nb_front_end = 0;
     
    14091421        _execute_loop_nb_packet     [i] = max_size_rob    ;
    14101422   
    1411         log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_front_end  : %d"),_execute_loop_nb_front_end  [i]);
    1412         log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_context    : %d"),_execute_loop_nb_context    [i]);
    1413         log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_packet     : %d"),_execute_loop_nb_packet     [i]);
     1423        log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_front_end  : %d"),_execute_loop_nb_front_end  [i]);
     1424        log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_context    : %d"),_execute_loop_nb_context    [i]);
     1425        log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_packet     : %d"),_execute_loop_nb_packet     [i]);
    14141426   
    14151427        _execute_loop_nb_thread     [i] = get_nb_thread(_execute_loop_nb_context    [i],
     
    14171429                                                        _execute_loop_nb_ooo_engine [i]);
    14181430   
    1419         log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_thread     : %d"),_execute_loop_nb_thread     [i]);
     1431        log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_thread     : %d"),_execute_loop_nb_thread     [i]);
    14201432      }
    14211433   
     
    14311443    ALLOC2(_execute_loop_nb_inst_retire                            ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]);
    14321444   
    1433     log_printf(TRACE,Core,FUNCTION,_(" * execute_loop - Read_unit"));
     1445    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop - Read_unit"));
    14341446    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    14351447      {
    1436         log_printf(TRACE,Core,FUNCTION,_("   * [%d] nb_read_unit : %d"),i,_nb_read_unit[i]);
     1448        log_printf(TRACE,Core,FUNCTION,_("    * [%d] nb_read_unit : %d"),i,_nb_read_unit[i]);
    14371449       
    14381450        for (uint32_t j=0; j<_nb_read_unit[i]; ++j)
     
    14401452            uint32_t num_read_bloc = _link_read_bloc_with_read_unit [i][j];
    14411453
    1442             log_printf(TRACE,Core,FUNCTION,_("     * num_read_bloc : %d"),num_read_bloc);
     1454            log_printf(TRACE,Core,FUNCTION,_("      * num_read_bloc : %d"),num_read_bloc);
    14431455           
    14441456            _execute_loop_size_read_queue          [i][j] = _size_read_queue          [num_read_bloc];
     
    14941506                _execute_loop_nb_inst_functionnal_unit [i][num_fu] = _nb_inst_functionnal_unit [num_functionnal_unit];
    14951507               
    1496                 log_printf(TRACE,Core,FUNCTION,"  * _execute_loop_nb_inst_functionnal_unit [%d][%d] = _nb_inst_functionnal_unit [%d] = %d",i,num_fu,num_functionnal_unit,_nb_inst_functionnal_unit [num_functionnal_unit]);
     1508                log_printf(TRACE,Core,FUNCTION,_("   * _execute_loop_nb_inst_functionnal_unit [%d][%d] = _nb_inst_functionnal_unit [%d] = %d"),i,num_fu,num_functionnal_unit,_nb_inst_functionnal_unit [num_functionnal_unit]);
    14971509
    14981510                for (uint32_t k=0; k<_nb_type; ++k)
     
    15271539          uint32_t num_load_store_unit = _list_load_store_unit_with_execute_unit [i][j];
    15281540   
    1529           log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_load_store_unit [%d][%d] : %d"),i,j,num_load_store_unit);
    1530           log_printf(TRACE,Core,FUNCTION,_("   * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]);
     1541          log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_nb_load_store_unit [%d][%d] : %d"),i,j,num_load_store_unit);
     1542          log_printf(TRACE,Core,FUNCTION,_("    * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]);
    15311543
    15321544          _execute_loop_size_store_queue              [i][j] = _size_store_queue              [num_load_store_unit];
     
    16191631    ALLOC4(_execute_loop_read_unit_to_execution_unit_table_routing ,bool    ,_nb_execute_loop,_nb_read_unit[it1],_nb_execute_unit[it1],_execute_loop_nb_execute_unit_port[it1][it2]);
    16201632   
    1621     log_printf(TRACE,Core,FUNCTION,_("execute_loop_read_unit_to_execution_unit_table_routing [execute_loop][read_unit][execute_unit][execute_unit_port]"));
     1633    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_read_unit_to_execution_unit_table_routing [execute_loop][read_unit][execute_unit][execute_unit_port]"));
    16221634    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    16231635      for (uint32_t j=0; j<_nb_execute_unit[i]; ++j)
     
    16471659    ALLOC4(_execute_loop_execution_unit_to_write_unit_table_routing,bool    ,_nb_execute_loop,_nb_execute_unit[it1],_execute_loop_nb_execute_unit_port[it1][it2],_nb_write_unit[it1]);
    16481660   
    1649     log_printf(TRACE,Core,FUNCTION,_("execute_loop_execution_unit_to_write_unit_table_routing [execute_loop][execute_unit][execute_unit_port][write_unit]"));
     1661    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_execution_unit_to_write_unit_table_routing [execute_loop][execute_unit][execute_unit_port][write_unit]"));
    16501662
    16511663    for (uint32_t i=0; i<_nb_execute_loop; ++i)
     
    16771689    ALLOC3(_execute_loop_execution_unit_to_write_unit_table_thread ,bool    ,_nb_execute_loop,_nb_write_unit[it1],_execute_loop_nb_thread [it1]);
    16781690   
    1679     log_printf(TRACE,Core,FUNCTION,_("execute_loop_read_unit_to_execution_unit_table_thread"));
     1691    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_read_unit_to_execution_unit_table_thread"));
    16801692    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    16811693      {
     
    17041716                    {
    17051717                      uint32_t num_thread = execute_loop_get_num_thread (i,k);
     1718
     1719#ifdef DEBUG_TEST
     1720                      if (num_thread == static_cast<Tcontext_t>(-1))
     1721                        throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : thread %d is invalid."),i,k));
     1722#endif
     1723
    17061724                      _execute_loop_read_unit_to_execution_unit_table_thread [i][j][num_thread] = true;
    17071725                      log_printf(TRACE,Core,FUNCTION,_("   [%d][%d][%d] -> Ok"),i,j,num_thread);
     
    17221740      }
    17231741   
     1742    ALLOC2(_execute_loop_num_thread_valid                          ,bool    ,_nb_execute_loop,_execute_loop_nb_thread[it1]);
     1743
     1744    log_printf(TRACE,Core,FUNCTION,_("  * execute_loop_num_thread_valid"));
     1745
     1746    for (uint32_t i=0; i<_nb_execute_loop; ++i)
     1747      {
     1748        for (uint32_t j=0; j<_execute_loop_nb_thread[i]; ++j)
     1749          _execute_loop_num_thread_valid [i][j] = false;
     1750
     1751        for (uint32_t j=0; j<_nb_thread; ++j)
     1752          {
     1753            uint32_t num_thread = execute_loop_get_num_thread (i,j);
     1754         
     1755            if (num_thread != static_cast<Tcontext_t>(-1))
     1756              {
     1757                log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> valid"),i,num_thread);
     1758
     1759                _execute_loop_num_thread_valid [i][num_thread] = true;
     1760              }
     1761          }
     1762      }
     1763
     1764
    17241765    ALLOC2(_icache_access_size_packet_id,uint32_t,_nb_front_end,_nb_context[it1]);
    17251766    ALLOC2(_icache_access_table_routing ,uint32_t,_nb_front_end,_nb_context[it1]);
     
    20412082
    20422083         _execute_loop_is_load_store_unit                         [i],
    2043          _execute_loop_translate_num_execute_unit                 [i]
     2084         _execute_loop_translate_num_execute_unit                 [i],
     2085
     2086         _execute_loop_num_thread_valid                           [i]
    20442087         );
    20452088
     
    21532196    DELETE2(_icache_access_table_routing                            ,_nb_front_end,_nb_context[it1]);
    21542197    DELETE2(_icache_access_size_packet_id                           ,_nb_front_end,_nb_context[it1]);
     2198    DELETE2(_execute_loop_num_thread_valid                          ,_nb_execute_loop,_execute_loop_nb_thread[it1]);
    21552199    DELETE3(_execute_loop_execution_unit_to_write_unit_table_thread ,_nb_execute_loop,_nb_write_unit[it1],_execute_loop_nb_thread [it1]);
    21562200    DELETE3(_execute_loop_read_unit_to_execution_unit_table_thread  ,_nb_execute_loop,_nb_execute_unit[it1],_execute_loop_nb_thread[it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h

    r119 r120  
    1010#define MORPHEO_MAJOR_VERSION "0"
    1111#define MORPHEO_MINOR_VERSION "2"
    12 #define MORPHEO_REVISION      "119"
     12#define MORPHEO_REVISION      "120"
    1313#define MORPHEO_CODENAME      "Castor"
    1414
    15 #define MORPHEO_DATE_DAY      "25
     15#define MORPHEO_DATE_DAY      "26
    1616#define MORPHEO_DATE_MONTH    "05"
    1717#define MORPHEO_DATE_YEAR     "2009"
Note: See TracChangeset for help on using the changeset viewer.