Ignore:
Timestamp:
Dec 10, 2008, 7:31:39 PM (15 years ago)
Author:
rosiere
Message:

Almost complete design
with Test and test platform

File:
1 edited

Legend:

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

    r81 r88  
    3434                          uint32_t  * nb_special_register      ,
    3535                          uint32_t  * nb_inst_insert_rob       ,
    36                           uint32_t  * nb_inst_retire_rob       ):
    37     _nb_ooo_engine             (nb_ooo_engine            ),
    38     _size_general_data         (size_general_data        ),
    39     _size_special_data         (size_special_data        ),
    40     _nb_gpr_read               (nb_gpr_read              ),
    41     _nb_gpr_write              (nb_gpr_write             ),
    42     _nb_gpr_bank               (nb_gpr_bank              ),
    43     _nb_gpr_port_read_by_bank  (nb_gpr_port_read_by_bank ),
    44     _nb_gpr_port_write_by_bank (nb_gpr_port_write_by_bank),
    45     _nb_spr_read               (nb_spr_read              ),
    46     _nb_spr_write              (nb_spr_write             ),
    47     _nb_spr_bank               (nb_spr_bank              ),
    48     _nb_spr_port_read_by_bank  (nb_spr_port_read_by_bank ),
    49     _nb_spr_port_write_by_bank (nb_spr_port_write_by_bank),
    50     _nb_general_register       (nb_general_register      ),
    51     _nb_special_register       (nb_special_register      ),
    52     _nb_inst_insert_rob        (nb_inst_insert_rob       ),
    53     _nb_inst_retire_rob        (nb_inst_retire_rob       ),
    54     _have_port_ooo_engine_id   (nb_ooo_engine>1          )
    55    
     36                          uint32_t  * nb_inst_retire_rob       ,
     37                          bool        is_toplevel              )
    5638  {
    5739    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
     40
     41
     42    _nb_ooo_engine             = nb_ooo_engine            ;
     43    _nb_gpr_read               = nb_gpr_read              ;
     44    _nb_gpr_write              = nb_gpr_write             ;
     45    _nb_gpr_bank               = nb_gpr_bank              ;
     46    _nb_gpr_port_read_by_bank  = nb_gpr_port_read_by_bank ;
     47    _nb_gpr_port_write_by_bank = nb_gpr_port_write_by_bank;
     48    _nb_spr_read               = nb_spr_read              ;
     49    _nb_spr_write              = nb_spr_write             ;
     50    _nb_spr_bank               = nb_spr_bank              ;
     51    _nb_spr_port_read_by_bank  = nb_spr_port_read_by_bank ;
     52    _nb_spr_port_write_by_bank = nb_spr_port_write_by_bank;
     53    _nb_general_register       = nb_general_register      ;
     54    _nb_special_register       = nb_special_register      ;
     55    _nb_inst_insert_rob        = nb_inst_insert_rob       ;
     56    _nb_inst_retire_rob        = nb_inst_retire_rob       ;
    5857
    5958    _size_gpr_address = log2(nb_general_register [0]);
     
    7473          _size_spr_address = new_size;
    7574      }
    76 
    7775
    7876    _param_gpr         = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
     
    8684    __param_spr_status = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * [_nb_ooo_engine];
    8785   
    88    for (uint32_t i=0; i<_nb_ooo_engine; i++)
    89      {
    90        Tcrossbar_t crossbar = PARTIAL_CROSSBAR;
    91  
    92        __param_gpr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
    93          (_nb_gpr_read              ,
    94           _nb_gpr_write             ,
    95           _nb_general_register[i]   ,
    96           _size_general_data        ,
    97           _nb_gpr_bank              ,
    98           _nb_gpr_port_read_by_bank ,
    99           _nb_gpr_port_write_by_bank,
    100           crossbar                  );
    101 
    102        __param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
    103          (_nb_gpr_read ,
    104           _nb_gpr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
    105           0,
    106           nb_general_register[i],
    107           1);
    108 
    109        __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
    110          (_nb_spr_read              ,
    111           _nb_spr_write             ,
    112           _nb_special_register[i]   ,
    113           _size_special_data        ,
    114           _nb_spr_bank              ,
    115           _nb_spr_port_read_by_bank ,
    116           _nb_spr_port_write_by_bank,
    117           crossbar                  );
    118 
    119        __param_spr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
    120          (_nb_spr_read ,
    121           _nb_spr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
    122           0,
    123           nb_special_register[i],
    124           1);   
    125 
    126        _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
    127        _param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr_status [i]);
    128        _param_spr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr        [i]);
    129        _param_spr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr_status [i]);
    130      }
    131 
    132    _param_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters  (_nb_ooo_engine        ,
    133                                                                                                                                          _size_general_data    ,
    134                                                                                                                                          _size_special_data    ,
    135                                                                                                                                          _nb_gpr_read          ,
    136                                                                                                                                          _nb_spr_read          ,   
    137                                                                                                                                          _nb_gpr_write         ,
    138                                                                                                                                          _nb_spr_write         ,
    139                                                                                                                                          _nb_inst_insert_rob   ,
    140                                                                                                                                          _nb_inst_retire_rob   );
    141      
     86    for (uint32_t i=0; i<_nb_ooo_engine; i++)
     87      {
     88        Tcrossbar_t crossbar = PARTIAL_CROSSBAR;
     89       
     90        __param_gpr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
     91          (_nb_gpr_read              ,
     92           _nb_gpr_write             ,
     93           _nb_general_register[i]   ,
     94            size_general_data        ,
     95           _nb_gpr_bank              ,
     96           _nb_gpr_port_read_by_bank ,
     97           _nb_gpr_port_write_by_bank,
     98           crossbar                  );
     99       
     100        __param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
     101          (_nb_gpr_read ,
     102//         _nb_gpr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
     103           _nb_gpr_write+_nb_inst_insert_rob[i],
     104           0,
     105           nb_general_register[i],
     106           1);
     107       
     108        __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters
     109          (_nb_spr_read              ,
     110           _nb_spr_write             ,
     111           _nb_special_register[i]   ,
     112            size_special_data        ,
     113           _nb_spr_bank              ,
     114           _nb_spr_port_read_by_bank ,
     115           _nb_spr_port_write_by_bank,
     116           crossbar                  );
     117       
     118        __param_spr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters
     119          (_nb_spr_read ,
     120//         _nb_spr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
     121           _nb_spr_write+_nb_inst_insert_rob[i],
     122           0,
     123           nb_special_register[i],
     124           1);   
     125       
     126        _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
     127        _param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr_status [i]);
     128        _param_spr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr        [i]);
     129        _param_spr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr_status [i]);
     130      }
    142131   
    143 
    144 
     132    _param_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters  (_nb_ooo_engine        ,
     133                                                                                                                                           size_general_data    ,
     134                                                                                                                                           size_special_data    ,
     135                                                                                                                                          _nb_gpr_read          ,
     136                                                                                                                                          _nb_spr_read          ,   
     137                                                                                                                                          _nb_gpr_write         ,
     138                                                                                                                                          _nb_spr_write         ,
     139                                                                                                                                          _nb_inst_insert_rob   ,
     140                                                                                                                                          _nb_inst_retire_rob   );
     141   
    145142    test();
    146     log_printf(FUNC,Register_unit,FUNCTION,"End");
     143   
     144    if (is_toplevel)
     145      {
     146        _size_ooo_engine_id        = log2(nb_ooo_engine);
     147        _size_general_data         = size_general_data;
     148        _size_special_data         = size_special_data;
     149       
     150        _have_port_ooo_engine_id   = _size_ooo_engine_id > 0;
     151
     152        copy();
     153      }
     154   
     155   log_printf(FUNC,Register_unit,FUNCTION,"End");
    147156  };
    148157 
     158// #undef  FUNCTION
     159// #define FUNCTION "Register_unit::Parameters (copy)"
     160//   Parameters::Parameters (Parameters & param):
     161//     _nb_ooo_engine             (param._nb_ooo_engine            ),
     162//     _size_general_data         (param._size_general_data        ),
     163//     _size_special_data         (param._size_special_data        ),
     164//     _nb_gpr_read               (param._nb_gpr_read              ),
     165//     _nb_gpr_write              (param._nb_gpr_write             ),
     166//     _nb_gpr_bank               (param._nb_gpr_bank              ),
     167//     _nb_gpr_port_read_by_bank  (param._nb_gpr_port_read_by_bank ),
     168//     _nb_gpr_port_write_by_bank (param._nb_gpr_port_write_by_bank),
     169//     _nb_spr_read               (param._nb_spr_read              ),
     170//     _nb_spr_write              (param._nb_spr_write             ),
     171//     _nb_spr_bank               (param._nb_spr_bank              ),
     172//     _nb_spr_port_read_by_bank  (param._nb_spr_port_read_by_bank ),
     173//     _nb_spr_port_write_by_bank (param._nb_spr_port_write_by_bank),
     174//     _nb_general_register       (param._nb_general_register      ),
     175//     _nb_special_register       (param._nb_special_register      ),
     176//     _nb_inst_insert_rob        (param._nb_inst_insert_rob       ),
     177//     _nb_inst_retire_rob        (param._nb_inst_retire_rob       ),
     178//     _have_port_ooo_engine_id   (param._have_port_ooo_engine_id  )
     179//   {
     180//     log_printf(FUNC,Register_unit,FUNCTION,"Begin");
     181
     182//     _size_gpr_address = param._size_gpr_address;
     183//     _size_spr_address = param._size_spr_address;
     184
     185//     __param_gpr        = param.__param_gpr       ;
     186//     __param_gpr_status = param.__param_gpr_status;
     187//     __param_spr        = param.__param_spr       ;
     188//     __param_spr_status = param.__param_spr_status;
     189//     _param_gpr         = param._param_gpr       ;
     190//     _param_gpr_status  = param._param_gpr_status;
     191//     _param_spr         = param._param_spr       ;
     192//     _param_spr_status  = param._param_spr_status;
     193//     _param_glue        = param._param_glue      ;
     194
     195//     test();
     196//     log_printf(FUNC,Register_unit,FUNCTION,"End");
     197//   };
     198
    149199#undef  FUNCTION
    150 #define FUNCTION "Register_unit::Parameters (copy)"
    151   Parameters::Parameters (Parameters & param):
    152     _nb_ooo_engine             (param._nb_ooo_engine            ),
    153     _size_general_data         (param._size_general_data        ),
    154     _size_special_data         (param._size_special_data        ),
    155     _nb_gpr_read               (param._nb_gpr_read              ),
    156     _nb_gpr_write              (param._nb_gpr_write             ),
    157     _nb_gpr_bank               (param._nb_gpr_bank              ),
    158     _nb_gpr_port_read_by_bank  (param._nb_gpr_port_read_by_bank ),
    159     _nb_gpr_port_write_by_bank (param._nb_gpr_port_write_by_bank),
    160     _nb_spr_read               (param._nb_spr_read              ),
    161     _nb_spr_write              (param._nb_spr_write             ),
    162     _nb_spr_bank               (param._nb_spr_bank              ),
    163     _nb_spr_port_read_by_bank  (param._nb_spr_port_read_by_bank ),
    164     _nb_spr_port_write_by_bank (param._nb_spr_port_write_by_bank),
    165     _nb_general_register       (param._nb_general_register      ),
    166     _nb_special_register       (param._nb_special_register      ),
    167     _nb_inst_insert_rob        (param._nb_inst_insert_rob       ),
    168     _nb_inst_retire_rob        (param._nb_inst_retire_rob       ),
    169     _have_port_ooo_engine_id   (param._have_port_ooo_engine_id  )
     200#define FUNCTION "Register_unit::~Parameters"
     201  Parameters::~Parameters (void)
    170202  {
    171203    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
    172204
    173     _size_gpr_address = param._size_gpr_address;
    174     _size_spr_address = param._size_spr_address;
    175 
    176     __param_gpr        = param.__param_gpr       ;
    177     __param_gpr_status = param.__param_gpr_status;
    178     __param_spr        = param.__param_spr       ;
    179     __param_spr_status = param.__param_spr_status;
    180     _param_gpr         = param._param_gpr       ;
    181     _param_gpr_status  = param._param_gpr_status;
    182     _param_spr         = param._param_spr       ;
    183     _param_spr_status  = param._param_spr_status;
    184     _param_glue        = param._param_glue      ;
    185 
    186     test();
    187     log_printf(FUNC,Register_unit,FUNCTION,"End");
    188   };
    189 
    190 #undef  FUNCTION
    191 #define FUNCTION "Register_unit::~Parameters"
    192   Parameters::~Parameters ()
    193   {
    194     log_printf(FUNC,Register_unit,FUNCTION,"Begin");
    195 
    196     delete [] _param_gpr       ;
    197     delete [] _param_gpr_status;
    198     delete [] _param_spr       ;
    199     delete [] _param_spr_status;
     205    for (uint32_t i=0; i<_nb_ooo_engine; i++)
     206      {
     207        delete _param_gpr         [i];
     208        delete _param_gpr_status  [i];
     209        delete _param_spr         [i];
     210        delete _param_spr_status  [i];
     211        delete __param_gpr        [i];
     212        delete __param_gpr_status [i];
     213        delete __param_spr        [i];
     214        delete __param_spr_status [i];
     215      }
     216    delete [] _param_gpr        ;
     217    delete [] _param_gpr_status ;
     218    delete [] _param_spr        ;
     219    delete [] _param_spr_status ;
    200220    delete [] __param_gpr       ;
    201221    delete [] __param_gpr_status;
     
    207227  };
    208228
     229#undef  FUNCTION
     230#define FUNCTION "Register_unit::copy"
     231  void Parameters::copy (void)
     232  {
     233    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
     234
     235    for (uint32_t i=0; i<_nb_ooo_engine; i++)
     236      {
     237        COPY(__param_gpr        [i]);
     238        COPY(__param_gpr_status [i]);
     239        COPY(__param_spr        [i]);
     240        COPY(__param_spr_status [i]);
     241      }
     242    COPY(_param_glue);
     243   
     244    log_printf(FUNC,Register_unit,FUNCTION,"End");
     245  };
     246
    209247}; // end namespace register_unit
    210248}; // end namespace execute_loop
Note: See TracChangeset for help on using the changeset viewer.