Ignore:
Timestamp:
Mar 27, 2008, 11:04:49 AM (16 years ago)
Author:
rosiere
Message:

Add :

  • Execute_loop (must be test systemC)
  • Prediction
    • Direction : predifined scheme
    • Branch Target Buffer
  • iFetch_unit
    • ifetch_queue
    • pc management
  • Decod_unit
    • coming soon : support for custom operation
  • Rename_unit
    • RAT
    • Free_list
    • Dependence RAW check
    • Load store unit pointer
  • New Environnement (hierarchy_memory will remove in a next version)


Modif :

  • Manage Custom Operation
  • All component in execute_loop to use the new statistics management

Not Finish :

  • Return Address Stack
  • Environnement
Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp

    r77 r78  
    6060    _have_port_ooo_engine_id (_size_ooo_engine_id > 0),
    6161    _have_port_packet_id     (_size_packet_id     > 0),
     62    _have_port_load_queue_ptr(_size_load_queue    > 1),
    6263
    6364    _nb_thread               (get_nb_thread (nb_context, nb_front_end, nb_ooo_engine))
     
    6869    _table_execute_type   = table_execute_type  ;
    6970    _table_execute_thread = table_execute_thread;
    70    
    71     _nb_load_store_unit = 0;
     71
     72    _nb_load_store_unit   = 0;
    7273
    7374    for (uint32_t i=0; i<nb_execute_unit; i++)
    74       if (table_execute_type[i][TYPE_MEMORY] == true)
    75         _nb_load_store_unit ++;
    76 
     75      {
     76        if (table_execute_type[i][TYPE_MEMORY] == true)
     77          _nb_load_store_unit ++;
     78      }
    7779    // a execution_unit can't be a load_store unit and a functionnal unit
    7880    _nb_functionnal_unit = nb_execute_unit-_nb_load_store_unit;
     
    111113    _have_port_ooo_engine_id (param._have_port_ooo_engine_id),
    112114    _have_port_packet_id     (param._have_port_packet_id    ),
     115    _have_port_load_queue_ptr(param._have_port_load_queue_ptr),
    113116
    114117    _nb_thread               (param._nb_thread              )
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp

    r77 r78  
    2121#undef  FUNCTION
    2222#define FUNCTION "Read_unit_to_Execution_unit::msg_error"
    23   std::string Parameters::msg_error(void)
     23  Parameters_test Parameters::msg_error(void)
    2424  {
    2525    log_printf(FUNC,Read_unit_to_Execution_unit,FUNCTION,"Begin");
    2626
    27     std::string msg = "";
     27    Parameters_test test ("Read_unit_to_Execution_unit");
    2828
    2929    // TYPE         | multiple? | Optionnal? | Exclusive? | Comment
     
    9090                // Test uniq type
    9191                if (type_present [j][k] and type_uniq[k])
    92                   msg += "  - The execute_unit '"+toString(i)+"' can execute operation of type '"+toString_type(k)+"' at the thread '"+toString(j)+"'. But an another execute_unit can be execute the same type for the same thread. And the type must be uniq !.\n";
     92                  test.error("The execute_unit '"+toString(i)+"' can execute operation of type '"+toString_type(k)+"' at the thread '"+toString(j)+"'. But an another execute_unit can be execute the same type for the same thread. And the type must be uniq !.");
    9393               
    9494                type_present [j][k] = true;
     
    9999        for (uint32_t i=0; i<_nb_thread; i++)
    100100          if (not type_present [i][j])
    101             msg += "  - The thread '"+toString(i)+"' can't access at the execute_unit to execute the type's operation '"+toString_type(j)+"' (and this type is not optionnal !).\n";
     101            test.error("The thread '"+toString(i)+"' can't access at the execute_unit to execute the type's operation '"+toString_type(j)+"' (and this type is not optionnal !).");
    102102           
    103103    // Test all excluve type
     
    108108            if ((j != k) and (_table_execute_type[i][k] == true))
    109109              {
    110                 msg += "  - The execute_unit ["+toString(i)+"] implement the type '"+toString_type(j)+"', and this type is exclusive with all others type.\n";
     110                test.error("The execute_unit ["+toString(i)+"] implement the type '"+toString_type(j)+"', and this type is exclusive with all others type.");
    111111                break;
    112112              }
     
    120120
    121121        if (j == _nb_thread)
    122           msg += "  - The execute_unit ["+toString(i)+"] have none source's thread.\n";
     122          test.error("The execute_unit ["+toString(i)+"] have none source's thread.");
    123123      }   
    124    
    125     return msg;
    126124
     125    if ( (_priority != PRIORITY_STATIC     ) and
     126         (_priority != PRIORITY_ROUND_ROBIN))
     127      test.error("Unsupported priority scheme. It must be Static or Round Robin.");
     128       
    127129    log_printf(FUNC,Read_unit_to_Execution_unit,FUNCTION,"End");
     130
     131    return test;
    128132  };
    129133
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit.cpp

    r77 r78  
    8989                      << (*(in_READ_UNIT_OUT_OPERATION             [i]))
    9090                      << (*(in_READ_UNIT_OUT_TYPE                  [i]))
    91                       << (*(in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE [i]))
    92                       << (*(in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE  [i]))
    9391                      << (*(in_READ_UNIT_OUT_HAS_IMMEDIAT          [i]))
    9492                      << (*(in_READ_UNIT_OUT_IMMEDIAT              [i]))
     
    9997                      << (*(in_READ_UNIT_OUT_NUM_REG_RD            [i]))
    10098                      << (*(in_READ_UNIT_OUT_WRITE_RE              [i]))
    101                       << (*(in_READ_UNIT_OUT_NUM_REG_RE            [i]));
    102 
     99                      << (*(in_READ_UNIT_OUT_NUM_REG_RE            [i]))
     100                      << (*(in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE [i]));
     101
     102            if (_param->_have_port_load_queue_ptr)
     103            sensitive  << (*(in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE  [i]));
    103104            if (_param->_have_port_context_id)
    104105            sensitive  << (*(in_READ_UNIT_OUT_CONTEXT_ID            [i]));
     
    260261              }
    261262
     263            if (_param->_have_port_load_queue_ptr)
     264              {
    262265            (*(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE [i])) (*(in_EXECUTE_UNIT_IN_ACK [i]));
    263266
     
    274277                (*(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE [i])) (*(in_READ_UNIT_OUT_OOO_ENGINE_ID        [j]));
    275278              }
    276 
     279              }
     280           
    277281            (*(out_EXECUTE_UNIT_IN_HAS_IMMEDIAT [i])) (*(in_EXECUTE_UNIT_IN_ACK [i]));
    278282
     
    364368                (*(out_EXECUTE_UNIT_IN_WRITE_RD [i])) (*(in_READ_UNIT_OUT_OOO_ENGINE_ID [j]));
    365369              }
    366 
     370           
    367371            (*(out_EXECUTE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_IN_ACK [i]));
    368372
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit_allocation.cpp

    r77 r78  
    5959       ALLOC1_INTERFACE("read_unit_out", IN, EAST, "Output of read_unit", _param->_nb_read_unit);
    6060
    61        ALLOC1_VAL_IN ( in_READ_UNIT_OUT_VAL);
    62        ALLOC1_ACK_OUT(out_READ_UNIT_OUT_ACK);
     61       ALLOC1_VALACK_IN ( in_READ_UNIT_OUT_VAL,VAL);
     62       ALLOC1_VALACK_OUT(out_READ_UNIT_OUT_ACK,ACK);
    6363
    6464       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_CONTEXT_ID           ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id);
     
    6868       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_OPERATION            ,"OPERATION"            ,Toperation_t      ,_param->_size_operation);
    6969       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_TYPE                 ,"TYPE"                 ,Ttype_t           ,_param->_size_type);
    70        ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue);
    71        ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue);
     70       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,log2(_param->_size_store_queue));
     71       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,log2(_param->_size_load_queue));
    7272       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_HAS_IMMEDIAT         ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1);
    7373       ALLOC1_SIGNAL_IN ( in_READ_UNIT_OUT_IMMEDIAT             ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data);
     
    8282    // ~~~~~[ Interface "execute_unit_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    8383     {
    84        ALLOC1_INTERFACE("execute_unit_out", IN, EAST, "Output of execute_unit", _param->_nb_execute_unit);
    85 
    86        ALLOC1_VAL_OUT(out_EXECUTE_UNIT_IN_VAL);
    87        ALLOC1_ACK_IN ( in_EXECUTE_UNIT_IN_ACK);
     84       ALLOC1_INTERFACE("execute_unit_in", OUT, WEST, "Input of execute_unit", _param->_nb_execute_unit);
     85       
     86       ALLOC1_VALACK_OUT(out_EXECUTE_UNIT_IN_VAL,VAL);
     87       ALLOC1_VALACK_IN ( in_EXECUTE_UNIT_IN_ACK,ACK);
    8888
    8989       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_CONTEXT_ID           ,"CONTEXT_ID"           ,Tcontext_t        ,_param->_size_context_id);
     
    9393       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_OPERATION            ,"OPERATION"            ,Toperation_t      ,_param->_size_operation);
    9494       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_TYPE                 ,"TYPE"                 ,Ttype_t           ,_param->_size_type);
    95        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,_param->_size_store_queue);
    96        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,_param->_size_load_queue);
    9795       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_HAS_IMMEDIAT         ,"HAS_IMMEDIAT"         ,Tcontrol_t        ,1);
     96       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_DATA_RC              ,"DATA_RC"              ,Tspecial_data_t   ,_param->_size_special_data);
     97       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_WRITE_RD             ,"WRITE_RD"             ,Tcontrol_t        ,1);
     98       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_WRITE_RE             ,"WRITE_RE"             ,Tcontrol_t        ,1);
     99       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_NUM_REG_RE           ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register);
     100       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t        ,log2(_param->_size_store_queue));
     101       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t        ,log2(_param->_size_load_queue));
    98102       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_IMMEDIAT             ,"IMMEDIAT"             ,Tgeneral_data_t   ,_param->_size_general_data);
    99103       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_DATA_RA              ,"DATA_RA"              ,Tgeneral_data_t   ,_param->_size_general_data);
    100104       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_DATA_RB              ,"DATA_RB"              ,Tgeneral_data_t   ,_param->_size_general_data);
    101        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_DATA_RC              ,"DATA_RC"              ,Tspecial_data_t   ,_param->_size_special_data);
    102        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_WRITE_RD             ,"WRITE_RD"             ,Tcontrol_t        ,1);
    103105       ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_NUM_REG_RD           ,"NUM_REG_RD"           ,Tgeneral_address_t,_param->_size_general_register);
    104        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_WRITE_RE             ,"WRITE_RE"             ,Tcontrol_t        ,1);
    105        ALLOC1_SIGNAL_OUT(out_EXECUTE_UNIT_IN_NUM_REG_RE           ,"NUM_REG_RE"           ,Tspecial_address_t,_param->_size_special_register);
    106106     }
    107107    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit_deallocation.cpp

    r77 r78  
    4242        delete [] in_READ_UNIT_OUT_TYPE                 ;
    4343        delete [] in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE;
     44        if (_param->_have_port_load_queue_ptr)
    4445        delete [] in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE ;
    4546        delete [] in_READ_UNIT_OUT_HAS_IMMEDIAT         ;
     
    6667        delete [] out_EXECUTE_UNIT_IN_OPERATION            ;
    6768        delete [] out_EXECUTE_UNIT_IN_TYPE                 ;
     69        delete [] out_EXECUTE_UNIT_IN_HAS_IMMEDIAT         ;
     70        delete [] out_EXECUTE_UNIT_IN_DATA_RC              ;
     71        delete [] out_EXECUTE_UNIT_IN_WRITE_RD             ;
     72        delete [] out_EXECUTE_UNIT_IN_WRITE_RE             ;
     73        delete [] out_EXECUTE_UNIT_IN_NUM_REG_RE           ;
    6874        delete [] out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE;
     75        if (_param->_have_port_load_queue_ptr)
    6976        delete [] out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE ;
    70         delete [] out_EXECUTE_UNIT_IN_HAS_IMMEDIAT         ;
    7177        delete [] out_EXECUTE_UNIT_IN_IMMEDIAT             ;
    7278        delete [] out_EXECUTE_UNIT_IN_DATA_RA              ;
    7379        delete [] out_EXECUTE_UNIT_IN_DATA_RB              ;
    74         delete [] out_EXECUTE_UNIT_IN_DATA_RC              ;
    75         delete [] out_EXECUTE_UNIT_IN_WRITE_RD             ;
    7680        delete [] out_EXECUTE_UNIT_IN_NUM_REG_RD           ;
    77         delete [] out_EXECUTE_UNIT_IN_WRITE_RE             ;
    78         delete [] out_EXECUTE_UNIT_IN_NUM_REG_RE           ;
    7981      }
    8082    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Read_unit_to_Execution_unit_genMealy.cpp

    r77 r78  
    7878                    PORT_WRITE(out_EXECUTE_UNIT_IN_OPERATION             [dest], PORT_READ(in_READ_UNIT_OUT_OPERATION             [i]));
    7979                    PORT_WRITE(out_EXECUTE_UNIT_IN_TYPE                  [dest], PORT_READ(in_READ_UNIT_OUT_TYPE                  [i]));
     80                    PORT_WRITE(out_EXECUTE_UNIT_IN_HAS_IMMEDIAT          [dest], PORT_READ(in_READ_UNIT_OUT_HAS_IMMEDIAT          [i]));
     81                    PORT_WRITE(out_EXECUTE_UNIT_IN_DATA_RC               [dest], PORT_READ(in_READ_UNIT_OUT_DATA_RC               [i]));
     82                    PORT_WRITE(out_EXECUTE_UNIT_IN_WRITE_RD              [dest], PORT_READ(in_READ_UNIT_OUT_WRITE_RD              [i]));
     83                    PORT_WRITE(out_EXECUTE_UNIT_IN_WRITE_RE              [dest], PORT_READ(in_READ_UNIT_OUT_WRITE_RE              [i]));
     84                    PORT_WRITE(out_EXECUTE_UNIT_IN_NUM_REG_RE            [dest], PORT_READ(in_READ_UNIT_OUT_NUM_REG_RE            [i]));
    8085                    PORT_WRITE(out_EXECUTE_UNIT_IN_STORE_QUEUE_PTR_WRITE [dest], PORT_READ(in_READ_UNIT_OUT_STORE_QUEUE_PTR_WRITE [i]));
     86                    if (_param->_have_port_load_queue_ptr)
    8187                    PORT_WRITE(out_EXECUTE_UNIT_IN_LOAD_QUEUE_PTR_WRITE  [dest], PORT_READ(in_READ_UNIT_OUT_LOAD_QUEUE_PTR_WRITE  [i]));
    82                     PORT_WRITE(out_EXECUTE_UNIT_IN_HAS_IMMEDIAT          [dest], PORT_READ(in_READ_UNIT_OUT_HAS_IMMEDIAT          [i]));
    8388                    PORT_WRITE(out_EXECUTE_UNIT_IN_IMMEDIAT              [dest], PORT_READ(in_READ_UNIT_OUT_IMMEDIAT              [i]));
    8489                    PORT_WRITE(out_EXECUTE_UNIT_IN_DATA_RA               [dest], PORT_READ(in_READ_UNIT_OUT_DATA_RA               [i]));
    8590                    PORT_WRITE(out_EXECUTE_UNIT_IN_DATA_RB               [dest], PORT_READ(in_READ_UNIT_OUT_DATA_RB               [i]));
    86                     PORT_WRITE(out_EXECUTE_UNIT_IN_DATA_RC               [dest], PORT_READ(in_READ_UNIT_OUT_DATA_RC               [i]));
    87                     PORT_WRITE(out_EXECUTE_UNIT_IN_WRITE_RD              [dest], PORT_READ(in_READ_UNIT_OUT_WRITE_RD              [i]));
    8891                    PORT_WRITE(out_EXECUTE_UNIT_IN_NUM_REG_RD            [dest], PORT_READ(in_READ_UNIT_OUT_NUM_REG_RD            [i]));
    89                     PORT_WRITE(out_EXECUTE_UNIT_IN_WRITE_RE              [dest], PORT_READ(in_READ_UNIT_OUT_WRITE_RE              [i]));
    90                     PORT_WRITE(out_EXECUTE_UNIT_IN_NUM_REG_RE            [dest], PORT_READ(in_READ_UNIT_OUT_NUM_REG_RE            [i]));
    9192                  }
    9293              }
Note: See TracChangeset for help on using the changeset viewer.