Ignore:
Timestamp:
May 21, 2009, 12:01:32 AM (15 years ago)
Author:
rosiere
Message:

1) Stat List : scan all queue to find free register
2) Write_queue : test "genMealy" add bypass [0]
3) Functionnal_unit : add const parameters to add or not the pipeline_in
4) Load Store Unit : if load make an exception, free nb_check
5) Debug, change test to add model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp

    r117 r118  
    2828    if (PORT_READ(in_NRESET) == 0)
    2929      {
     30        if (_param->_have_pipeline_in)
    3031        reg_BUSY_IN  = false;
    3132        reg_BUSY_OUT = false;
     
    5051    else
    5152      {
    52         // Test if pop
     53        // Test if pop an instruction
    5354        if (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))
    5455          {
    5556            log_printf(TRACE,Functionnal_unit,FUNCTION,"  * EXECUTE_OUT : Transaction Accepted");
    56             // transaction
    5757            reg_BUSY_OUT = false;
    5858          }
    5959       
    60 
     60        // Test if can move instruction in pipeline in to pipeline out
     61        if (_param->_have_pipeline_in)
    6162        if (reg_BUSY_IN and not reg_BUSY_OUT)
    6263          {
     
    8788          }
    8889
    89 
    90 
    9190        // Test if push
    9291        execute_register_t * execute_register = NULL;
     
    9695            log_printf(TRACE,Functionnal_unit,FUNCTION,"  * EXECUTE_IN : Transaction Accepted");
    9796
    98             reg_BUSY_IN = true;
     97            execute_operation_t * execute_operation;
     98
     99            if (_param->_have_pipeline_in)
     100              {
     101            reg_BUSY_IN       = true;
     102            execute_operation = _execute_operation_in;
     103              }
     104            else
     105              {
     106            reg_BUSY_OUT      = true;
     107            execute_operation = _execute_operation_out;
     108              }
    99109
    100110            Tcontext_t   context_id    = (_param->_have_port_context_id   )?PORT_READ(in_EXECUTE_IN_CONTEXT_ID   ):0;
     
    104114            Toperation_t operation     = PORT_READ(in_EXECUTE_IN_OPERATION);
    105115            Ttype_t      type          = PORT_READ(in_EXECUTE_IN_TYPE);
    106            
    107             _execute_operation_in->_context_id    = context_id   ;
    108             _execute_operation_in->_front_end_id  = front_end_id ;
    109             _execute_operation_in->_ooo_engine_id = ooo_engine_id;
    110             _execute_operation_in->_packet_id     = packet_id    ;
    111             _execute_operation_in->_operation     = operation    ;
    112             _execute_operation_in->_type          = type         ;
    113             _execute_operation_in->_has_immediat  = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT);
    114             _execute_operation_in->_immediat      = PORT_READ(in_EXECUTE_IN_IMMEDIAT    );
    115             _execute_operation_in->_data_ra       = PORT_READ(in_EXECUTE_IN_DATA_RA     );
    116             _execute_operation_in->_data_rb       = PORT_READ(in_EXECUTE_IN_DATA_RB     );
    117             _execute_operation_in->_data_rc       = PORT_READ(in_EXECUTE_IN_DATA_RC     );
    118             _execute_operation_in->_write_rd      = PORT_READ(in_EXECUTE_IN_WRITE_RD    );
    119             _execute_operation_in->_num_reg_rd    = PORT_READ(in_EXECUTE_IN_NUM_REG_RD  );
    120             _execute_operation_in->_data_rd       = 0; // no necessaray
    121             _execute_operation_in->_write_re      = PORT_READ(in_EXECUTE_IN_WRITE_RE    );
    122             _execute_operation_in->_num_reg_re    = PORT_READ(in_EXECUTE_IN_NUM_REG_RE  );
    123             _execute_operation_in->_data_re       = 0; // no necessaray
    124 
    125             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * context_id    : %d",_execute_operation_in->_context_id   );
    126             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * front_end_id  : %d",_execute_operation_in->_front_end_id );
    127             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * ooo_engine_id : %d",_execute_operation_in->_ooo_engine_id);
    128             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * packet_id     : %d",_execute_operation_in->_packet_id    );
    129             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * operation     : %d",_execute_operation_in->_operation    );
    130             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * type          : %s",toString(_execute_operation_in->_type).c_str());
    131             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * has_immediat  : %d",_execute_operation_in->_has_immediat );
    132             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * immediat      : %.8x",_execute_operation_in->_immediat     );
    133             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_ra       : %.8x",_execute_operation_in->_data_ra      );
    134             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rb       : %.8x",_execute_operation_in->_data_rb      );
    135             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rc       : %.8x",_execute_operation_in->_data_rc      );
    136             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * write_rd      : %d"  ,_execute_operation_in->_write_rd     );
    137             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * num_reg_rd    : %d"  ,_execute_operation_in->_num_reg_rd   );
    138             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * write_re      : %d"  ,_execute_operation_in->_write_re     );
    139             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * num_reg_re    : %d"  ,_execute_operation_in->_num_reg_re   );
     116
     117            execute_operation->_context_id    = context_id   ;
     118            execute_operation->_front_end_id  = front_end_id ;
     119            execute_operation->_ooo_engine_id = ooo_engine_id;
     120            execute_operation->_packet_id     = packet_id    ;
     121            execute_operation->_operation     = operation    ;
     122            execute_operation->_type          = type         ;
     123            execute_operation->_has_immediat  = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT);
     124            execute_operation->_immediat      = PORT_READ(in_EXECUTE_IN_IMMEDIAT    );
     125            execute_operation->_data_ra       = PORT_READ(in_EXECUTE_IN_DATA_RA     );
     126            execute_operation->_data_rb       = PORT_READ(in_EXECUTE_IN_DATA_RB     );
     127            execute_operation->_data_rc       = PORT_READ(in_EXECUTE_IN_DATA_RC     );
     128            execute_operation->_write_rd      = PORT_READ(in_EXECUTE_IN_WRITE_RD    );
     129            execute_operation->_num_reg_rd    = PORT_READ(in_EXECUTE_IN_NUM_REG_RD  );
     130            execute_operation->_data_rd       = 0; // no necessaray
     131            execute_operation->_write_re      = PORT_READ(in_EXECUTE_IN_WRITE_RE    );
     132            execute_operation->_num_reg_re    = PORT_READ(in_EXECUTE_IN_NUM_REG_RE  );
     133            execute_operation->_data_re       = 0; // no necessaray
     134
     135            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * context_id    : %d",execute_operation->_context_id   );
     136            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * front_end_id  : %d",execute_operation->_front_end_id );
     137            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * ooo_engine_id : %d",execute_operation->_ooo_engine_id);
     138            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * packet_id     : %d",execute_operation->_packet_id    );
     139            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * operation     : %d",execute_operation->_operation    );
     140            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * type          : %s",toString(execute_operation->_type).c_str());
     141            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * has_immediat  : %d",execute_operation->_has_immediat );
     142            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * immediat      : %.8x",execute_operation->_immediat     );
     143            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_ra       : %.8x",execute_operation->_data_ra      );
     144            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rb       : %.8x",execute_operation->_data_rb      );
     145            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rc       : %.8x",execute_operation->_data_rc      );
     146            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * write_rd      : %d"  ,execute_operation->_write_rd     );
     147            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * num_reg_rd    : %d"  ,execute_operation->_num_reg_rd   );
     148            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * write_re      : %d"  ,execute_operation->_write_re     );
     149            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * num_reg_re    : %d"  ,execute_operation->_num_reg_re   );
    140150           
    141151#ifdef DEBUG_TEST
     
    156166//                                                   ooo_engine_id,_param->_size_ooo_engine_id);
    157167
    158                 (*(_param->_get_custom_information()._get_custom_execute_genMoore(operation))) (_execute_operation_in, execute_register, _execute_param);
     168                (*(_param->_get_custom_information()._get_custom_execute_genMoore(operation))) (execute_operation, execute_register, _execute_param);
    159169              }
    160170            else
    161               (*(_function_execute[type][operation])) (_execute_operation_in, execute_register, _execute_param);
     171              (*(_function_execute[type][operation])) (execute_operation, execute_register, _execute_param);
    162172
    163173
    164174            log_printf(TRACE,Functionnal_unit,FUNCTION,"    -----------------");
    165             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * latence       : %.8x",_execute_operation_in->_timing._latence);
    166             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * delay         : %.8x",_execute_operation_in->_timing._delay);
    167             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rd       : %.8x",_execute_operation_in->_data_rd    );
    168             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_re       : %.8x",_execute_operation_in->_data_re    );
    169             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * exception     : %d"  ,_execute_operation_in->_exception  );
    170             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * no_sequence   : %d"  ,_execute_operation_in->_no_sequence);
    171             log_printf(TRACE,Functionnal_unit,FUNCTION,"    * address       : %.8x (%.8x)",_execute_operation_in->_address,_execute_operation_in->_address<<2);
     175            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * latence       : %.8x",execute_operation->_timing._latence);
     176            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * delay         : %.8x",execute_operation->_timing._delay);
     177            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_rd       : %.8x",execute_operation->_data_rd    );
     178            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * data_re       : %.8x",execute_operation->_data_re    );
     179            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * exception     : %d"  ,execute_operation->_exception  );
     180            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * no_sequence   : %d"  ,execute_operation->_no_sequence);
     181            log_printf(TRACE,Functionnal_unit,FUNCTION,"    * address       : %.8x (%.8x)",execute_operation->_address,execute_operation->_address<<2);
    172182
    173183#ifdef STATISTICS
     
    175185              {
    176186                (*_stat_use_functionnal_unit) ++;
    177                 (*_stat_sum_delay)   += _execute_operation_in->_timing._delay;
    178                 (*_stat_sum_latence) += _execute_operation_in->_timing._latence;
     187                (*_stat_sum_delay)   += execute_operation->_timing._delay;
     188                (*_stat_sum_latence) += execute_operation->_timing._latence;
    179189              }
    180190#endif
     
    213223        if (reg_BUSY_OUT and (_execute_operation_out->_timing._latence > 0))
    214224          _execute_operation_out->_timing._latence --;
     225
     226#if defined(DEBUG) and DEBUG_Functionnal_unit and (DEBUG >= DEBUG_TRACE)
     227        {
     228          log_printf(TRACE,Functionnal_unit,FUNCTION,"  * Dump ALU (Functionnal_unit)");
     229
     230          if (_param->_have_pipeline_in)
     231          log_printf(TRACE,Functionnal_unit,FUNCTION,"    * reg_BUSY_IN  : %d",reg_BUSY_IN );
     232          log_printf(TRACE,Functionnal_unit,FUNCTION,"    * reg_BUSY_OUT : %d",reg_BUSY_OUT);
     233        }
     234#endif
    215235      }
    216236   
Note: See TracChangeset for help on using the changeset viewer.