Ignore:
Timestamp:
Dec 31, 2008, 11:18:08 AM (16 years ago)
Author:
rosiere
Message:

1) Fix bug (read unit, RAT -> write in R0, SPR desallocation ...)
2) Change VHDL Execute_queue -> use Generic/Queue?
3) Complete document on VHDL generation
4) Add soc test

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/src/test.cpp

    r88 r98  
    370370      for (uint32_t j=0; j<_param->_nb_ooo_engine; j++)
    371371        {
    372           for (uint32_t i=0; i<_param->_nb_general_register; i++)
     372          _gpr_val [0][j] = 0;
     373          _gpr     [0][j] = 0;
     374          _spr_val [0][j] = 0;
     375          _spr     [0][j] = 0;
     376
     377          for (uint32_t i=1; i<_param->_nb_general_register; i++)
    373378            {
    374379              _gpr_val      [i][j] = ((rand()%100) < percent_registerfile_valid);
    375380              _gpr          [i][j] = rand()%(1<<_param->_size_general_data);
    376381            }
    377           for (uint32_t i=0; i<_param->_nb_special_register; i++)
     382          for (uint32_t i=1; i<_param->_nb_special_register; i++)
    378383            {
    379384              _spr_val      [i][j] = ((rand()%100) < percent_registerfile_valid);
     
    381386            }
    382387        }
     388
     389
    383390      // End initialisation .......
    384391     
     
    466473              Tcontext_t         ooo_engine = rand()% _param->_nb_ooo_engine;
    467474              Tgeneral_address_t num_reg = rand()% _param->_nb_general_register;
    468               Tgeneral_data_t    data    = rand()%(1<<_param->_size_general_data);
     475              Tgeneral_data_t    data    = (num_reg!=0)?(rand()%(1<<_param->_size_general_data)):0;
    469476             
    470477              GPR_WRITE_VAL           [i]->write(val);       
     
    534541//            TEST(Tcontrol_t        ,READ_QUEUE_OUT_READ_RA    ->read(),_read_ra      [rob_id]);
    535542              TEST(Tgeneral_address_t,READ_QUEUE_OUT_NUM_REG_RA ->read(),_num_reg_ra   [rob_id]);
    536               TEST(Tcontrol_t        ,READ_QUEUE_OUT_DATA_RA_VAL->read(),not _read_ra [rob_id] or _gpr_val [_num_reg_ra[rob_id]][ctxt]);
     543              TEST(Tcontrol_t        ,READ_QUEUE_OUT_DATA_RA_VAL->read(),not _read_ra [rob_id] or _gpr_val [_num_reg_ra[rob_id]][ctxt] or (_num_reg_ra[rob_id] == 0));
    537544              if (_read_ra [rob_id] and
    538545                  READ_QUEUE_OUT_DATA_RA_VAL->read())
     
    540547//            TEST(Tcontrol_t        ,READ_QUEUE_OUT_READ_RB    ->read(),_read_rb      [rob_id]);
    541548              TEST(Tgeneral_address_t,READ_QUEUE_OUT_NUM_REG_RB ->read(),_num_reg_rb   [rob_id]);
    542               TEST(Tcontrol_t        ,READ_QUEUE_OUT_DATA_RB_VAL->read(),not _read_rb [rob_id] or _gpr_val [_num_reg_rb[rob_id]][ctxt]);
     549              TEST(Tcontrol_t        ,READ_QUEUE_OUT_DATA_RB_VAL->read(),not _read_rb [rob_id] or _gpr_val [_num_reg_rb[rob_id]][ctxt] or (_num_reg_rb[rob_id] == 0));
    543550              if (_read_rb [rob_id] and
    544551                  READ_QUEUE_OUT_DATA_RB_VAL->read())
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h

    r82 r98  
    110110      log_printf(FUNC,Read_queue,FUNCTION,"Begin");
    111111         
    112       _context_id   = x._context_id   ;
    113       _front_end_id = x._front_end_id ;
    114       _ooo_engine_id= x._ooo_engine_id;
    115       _rob_id       = x._rob_id       ;
    116       _operation    = x._operation    ;
    117       _type         = x._type         ;
     112      _context_id            = x._context_id   ;
     113      _front_end_id          = x._front_end_id ;
     114      _ooo_engine_id         = x._ooo_engine_id;
     115      _rob_id                = x._rob_id       ;
     116      _operation             = x._operation    ;
     117      _type                  = x._type         ;
    118118      _store_queue_ptr_write = x._store_queue_ptr_write;
    119119      _load_queue_ptr_write  = x._load_queue_ptr_write ;
    120       _has_immediat = x._has_immediat ;
    121       _immediat     = x._immediat     ;
    122       _read_ra      = x._read_ra      ;
    123       _read_ra_val  = x._read_ra == 1 ; //if not must read, the registerFile is already access
    124       _num_reg_ra   = x._num_reg_ra   ;
    125       _data_ra_val  = x._read_ra == 0 ; //if not must read, the data is already valid
    126       _data_ra      = 0               ;
    127       _read_rb      = x._read_rb      ;
    128       _read_rb_val  = x._read_rb == 1 ;
    129       _num_reg_rb   = x._num_reg_rb   ;
    130       _data_rb_val  = x._read_rb == 0 ;
    131       _data_rb      = 0               ;
    132       _read_rc      = x._read_rc      ;
    133       _read_rc_val  = x._read_rc == 1 ;
    134       _num_reg_rc   = x._num_reg_rc   ;
    135       _data_rc_val  = x._read_rc == 0 ;
    136       _data_rc      = 0               ;
    137       _write_rd     = x._write_rd     ;
    138       _num_reg_rd   = x._num_reg_rd   ;
    139       _write_re     = x._write_re     ;
    140       _num_reg_re   = x._num_reg_re   ;
     120      _has_immediat          = x._has_immediat ;
     121      _immediat              = x._immediat     ;
     122      _read_ra               = x._read_ra      ;
     123      _read_ra_val           = x._read_ra == 1 ; //if not must read, the registerFile is already access
     124      _num_reg_ra            = x._num_reg_ra   ;
     125      _data_ra_val           = ((x._read_ra == 0) or (x._num_reg_ra == 0)); //if not must read, the data is already valid
     126      _data_ra               = 0               ;
     127      _read_rb               = x._read_rb      ;
     128      _read_rb_val           = x._read_rb == 1 ;
     129      _num_reg_rb            = x._num_reg_rb   ;
     130      _data_rb_val           = ((x._read_rb == 0) or (x._num_reg_rb == 0));
     131      _data_rb               = 0               ;
     132      _read_rc               = x._read_rc      ;
     133      _read_rc_val           = x._read_rc == 1 ;
     134      _num_reg_rc            = x._num_reg_rc   ;
     135      _data_rc_val           = x._read_rc == 0 ;
     136      _data_rc               = 0               ;
     137      _write_rd              = x._write_rd     ;
     138      _num_reg_rd            = x._num_reg_rd   ;
     139      _write_re              = x._write_re     ;
     140      _num_reg_re            = x._num_reg_re   ;
    141141
    142142      log_printf(FUNC,Read_queue,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_transition.cpp

    r97 r98  
    146146        if (_queue->size()>0)
    147147          {
    148 //   protected : Tread_queue_head_entry_t       * _queue_head;
    149 //   protected : std::queue<Tread_queue_entry_t *>   * _queue;
    150            
    151148            log_printf(TRACE,Read_queue,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.8x, %.1d %.1d %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)",
    152149                       0,
     
    246243          }
    247244#endif
    248 
    249 
    250245      }
    251246
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl.cpp

    r81 r98  
    2626   
    2727    //----- Queue -----
    28     
     28   
    2929    morpheo::behavioural::generic::queue::Parameters * param_queue;
    3030    morpheo::behavioural::generic::queue::Queue      * queue;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp

    r97 r98  
    176176    vhdl->set_body(0,"out_READ_QUEUE_OUT_HAS_IMMEDIAT  <= internal_HAS_IMMEDIAT ;");
    177177    vhdl->set_body(0,"out_READ_QUEUE_OUT_IMMEDIAT      <= internal_IMMEDIAT     ;");
    178 //     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RA       <= internal_READ_RA      ;");
     178//  vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RA       <= internal_READ_RA      ;");
    179179    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RA    <= internal_NUM_REG_RA   ;");
    180180    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
    181181    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA       <= internal_NEXT_DATA_RA ;");
    182 //     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RB       <= internal_READ_RB      ;");
     182//  vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RB       <= internal_READ_RB      ;");
    183183    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RB    <= internal_NUM_REG_RB   ;");
    184184    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
    185185    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB       <= internal_NEXT_DATA_RB ;");
    186 //     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RC       <= internal_READ_RC      ;");
     186//  vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RC       <= internal_READ_RC      ;");
    187187    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RC    <= internal_NUM_REG_RC   ;");
    188188    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_transition.cpp

    r97 r98  
    2525      log_printf(TRACE,Reservation_station,FUNCTION,"  * Dump Reservation Station");  \
    2626      for (uint32_t it_dump=0;it_dump<_param->_size_queue; it_dump++)   \
    27         log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
    28                    it_dump,                                             \
    29                    _queue[it_dump]._context_id           ,              \
    30                    _queue[it_dump]._front_end_id         ,              \
    31                    _queue[it_dump]._ooo_engine_id        ,              \
    32                    _queue[it_dump]._rob_id               ,              \
    33                    _queue[it_dump]._type                 ,              \
    34                    _queue[it_dump]._operation            ,              \
    35                    _queue[it_dump]._store_queue_ptr_write,              \
    36                    _queue[it_dump]._load_queue_ptr_write ,              \
    37                    _queue[it_dump]._has_immediat         ,              \
    38                    _queue[it_dump]._immediat             ,              \
    39                    _queue[it_dump]._num_reg_ra           ,              \
    40                    _queue[it_dump]._data_ra_val          ,              \
    41                    _queue[it_dump]._data_ra              ,              \
    42                    _queue[it_dump]._num_reg_rb           ,              \
    43                    _queue[it_dump]._data_rb_val          ,              \
    44                    _queue[it_dump]._data_rb              ,              \
    45                    _queue[it_dump]._num_reg_rc           ,              \
    46                    _queue[it_dump]._data_rc_val          ,              \
    47                    _queue[it_dump]._data_rc              ,              \
    48                    _queue[it_dump]._write_rd             ,              \
    49                    _queue[it_dump]._num_reg_rd           ,              \
    50                    _queue[it_dump]._write_re             ,              \
    51                    _queue[it_dump]._num_reg_re           ,              \
    52                    toString(_queue[it_dump]._type).c_str());       \
     27        if (_queue_valid [it_dump])                                     \
     28          log_printf(TRACE,Reservation_station,FUNCTION,"    * [%.4d] %.2d %.2d %.2d %.4d, %.2d %.3d, %.2d %.2d, %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.8x, %.4d %.1d %.2x, %.1d %.4d, %.1d %.4d (%s)", \
     29                     it_dump,                                           \
     30                     _queue[it_dump]._context_id           ,            \
     31                     _queue[it_dump]._front_end_id         ,            \
     32                     _queue[it_dump]._ooo_engine_id        ,            \
     33                     _queue[it_dump]._rob_id               ,            \
     34                     _queue[it_dump]._type                 ,            \
     35                     _queue[it_dump]._operation            ,            \
     36                     _queue[it_dump]._store_queue_ptr_write,            \
     37                     _queue[it_dump]._load_queue_ptr_write ,            \
     38                     _queue[it_dump]._has_immediat         ,            \
     39                     _queue[it_dump]._immediat             ,            \
     40                     _queue[it_dump]._num_reg_ra           ,            \
     41                     _queue[it_dump]._data_ra_val          ,            \
     42                     _queue[it_dump]._data_ra              ,            \
     43                     _queue[it_dump]._num_reg_rb           ,            \
     44                     _queue[it_dump]._data_rb_val          ,            \
     45                     _queue[it_dump]._data_rb              ,            \
     46                     _queue[it_dump]._num_reg_rc           ,            \
     47                     _queue[it_dump]._data_rc_val          ,            \
     48                     _queue[it_dump]._data_rc              ,            \
     49                     _queue[it_dump]._write_rd             ,            \
     50                     _queue[it_dump]._num_reg_rd           ,            \
     51                     _queue[it_dump]._write_re             ,            \
     52                     _queue[it_dump]._num_reg_re           ,            \
     53                     toString(_queue[it_dump]._type).c_str());          \
    5354    } while (0)
    5455#else
Note: See TracChangeset for help on using the changeset viewer.