Ignore:
Timestamp:
Jun 8, 2009, 10:43:30 PM (15 years ago)
Author:
rosiere
Message:

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State.cpp

    r101 r123  
    3939    usage_environment(_usage);
    4040
    41 #if DEBUG_Context_State == true
    42     log_printf(INFO,Context_State,FUNCTION,_("<%s> Parameters"),_name.c_str());
     41// #if DEBUG_Context_State == true
     42//     log_printf(INFO,Context_State,FUNCTION,_("<%s> Parameters"),_name.c_str());
    4343
    44     std::cout << *param << std::endl;
    45 #endif   
     44//     std::cout << *param << std::endl;
     45// #endif   
    4646
    4747    log_printf(INFO,Context_State,FUNCTION,_("Allocation"));
     
    139139        // List dependency information
    140140# endif   
     141
     142        log_printf(INFO,Context_State,FUNCTION,_("Method - genMealy_context_event"));
     143
     144        SC_METHOD (genMealy_context_event);
     145        dont_initialize ();
     146//      sensitive << (*(in_CLOCK)).neg(); // use internal register
     147        sensitive << (*(in_COMMIT_EVENT_VAL             ));
     148        if (_param->_have_port_context_id)                                     
     149        sensitive << (*(in_COMMIT_EVENT_CONTEXT_ID      ));
     150        for (uint32_t i=0; i<_param->_nb_inst_branch_complete; ++i)
     151          {
     152            sensitive << (*(in_BRANCH_COMPLETE_VAL             [i]))
     153                      << (*(in_BRANCH_COMPLETE_MISS_PREDICTION [i]));
     154            if (_param->_have_port_context_id)                                 
     155            sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID      [i]));
     156          }
     157       
     158# ifdef SYSTEMCASS_SPECIFIC
     159        // List dependency information
     160# endif   
    141161       
    142162#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_allocation.cpp

    r119 r123  
    172172     
    173173      ALLOC1_SIGNAL_OUT(out_CONTEXT_DECOD_ENABLE               ,"decod_enable",Tcontrol_t,1);
     174      ALLOC1_SIGNAL_OUT(out_CONTEXT_EVENT                      ,"event"       ,Tcontrol_t,1);
    174175
    175176      ALLOC1_INTERFACE_END(_param->_nb_context);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_deallocation.cpp

    r119 r123  
    9191       
    9292        DELETE1_SIGNAL(out_CONTEXT_DECOD_ENABLE               ,_param->_nb_context,1);
     93        DELETE1_SIGNAL(out_CONTEXT_EVENT                      ,_param->_nb_context,1);
    9394
    9495        DELETE1_SIGNAL( in_DEPTH_MIN                          ,_param->_nb_context,_param->_size_depth);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMealy_decod_event.cpp

    r102 r123  
    2424    log_function(Context_State,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
    2729      {
     
    4951
    5052        internal_DECOD_EVENT_ACK [i] = ack;
    51         PORT_WRITE(out_DECOD_EVENT_ACK [i], internal_DECOD_EVENT_ACK [i]);
    5253      }
     54      }
     55    else
     56      {
     57        for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
     58          internal_DECOD_EVENT_ACK [i] = 0;
     59      }
     60
     61    for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
     62      PORT_WRITE(out_DECOD_EVENT_ACK [i], internal_DECOD_EVENT_ACK [i]);
    5363
    5464    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_genMoore.cpp

    r119 r123  
    2424    log_function(Context_State,FUNCTION,_name.c_str());
    2525
     26    if (PORT_READ(in_NRESET))
     27      {
    2628    // -------------------------------------------------------------------
    2729    // -----[ EVENT ]-----------------------------------------------------
     
    6769
    6870        internal_EVENT_VAL [i] = val;
    69         PORT_WRITE(out_EVENT_VAL              [i], val);
    7071        PORT_WRITE(out_EVENT_ADDRESS          [i], address);
    7172        PORT_WRITE(out_EVENT_ADDRESS_NEXT     [i], address_next);
     
    9798        internal_SPR_EVENT_VAL [i] = (state == CONTEXT_STATE_KO_EXCEP_SPR  );
    9899
    99         PORT_WRITE(out_SPR_EVENT_VAL       [i], internal_SPR_EVENT_VAL     [i]);
    100100        PORT_WRITE(out_SPR_EVENT_EPCR      [i], reg_EVENT_ADDRESS_EPCR     [i]);
    101101        PORT_WRITE(out_SPR_EVENT_EEAR      [i], reg_EVENT_ADDRESS_EEAR     [i]);
     
    117117        PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], (state==CONTEXT_STATE_OK));
    118118      }
     119      }
     120    else
     121      {
     122        for (uint32_t i=0; i<_param->_nb_context; i++)
     123          {
     124            internal_EVENT_VAL     [i] = 0;
     125            internal_SPR_EVENT_VAL [i] = 0;
     126
     127            PORT_WRITE(out_CONTEXT_DECOD_ENABLE [i], 0);
     128          }
     129      }
     130
     131    // Write output
     132    for (uint32_t i=0; i<_param->_nb_context; i++)
     133      {
     134        PORT_WRITE(out_EVENT_VAL     [i], internal_EVENT_VAL     [i]);
     135        PORT_WRITE(out_SPR_EVENT_VAL [i], internal_SPR_EVENT_VAL [i]);
     136      }
    119137
    120138    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp

    r122 r123  
    1616namespace context_state {
    1717
    18 #define MISS_FAST
     18// #define MANAGE_EVENT MANAGE_EVENT_WAIT_ALL
     19// #define MANAGE_EVENT MANAGE_EVENT_WAIT_DECODE
     20#define MANAGE_EVENT MANAGE_EVENT_NO_WAIT
    1921
    2022#define get_priority(x) \
    2123  (((state == CONTEXT_STATE_KO_MISS_LOAD_ADDR                  ) or  \
     24    (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND               ) or  \
    2225    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR       ) or  \
    23     (state == CONTEXT_STATE_KO_MISS_LOAD_WAITEND               ) or  \
    2426    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND    ) or  \
    2527    (state == CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE))?3: \
     
    4345            reg_STATE            [i] = CONTEXT_STATE_OK;
    4446            reg_INTERRUPT_ENABLE [i] = 0;
     47            reg_EVENT_DEPTH      [i] = 0; // unacessary
    4548          }
    4649      }
     
    5962            Tcounter_t inst_all        = inst_commit_all + inst_decod_all;
    6063//          Tcounter_t inst_mem        = inst_commit_mem + inst_decod_all;
     64            bool       condition       = ( (MANAGE_EVENT == MANAGE_EVENT_WAIT_ALL   )?(inst_all       == 0):
     65                                          ((MANAGE_EVENT == MANAGE_EVENT_WAIT_DECODE)?(inst_decod_all == 0):
     66                                            true));
    6167
    6268            context_state_t state = reg_STATE [i];
     
    8995              case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND :
    9096                {
    91                   // Wait end of all instruction
    92 //                if (inst_all == 0)
    93                   if (
    94 #ifdef  MISS_FAST
    95                       inst_decod_all ==
    96 #else
    97                       inst_all ==
    98 #endif
    99                       0)
    100                    
     97                  if (condition)
    10198//                  state = CONTEXT_STATE_OK;
    10299                    state = CONTEXT_STATE_KO_MISS_BRANCH_ADDR;
     
    106103                {
    107104                  // Wait end of all instruction
    108 //                if (inst_all == 0)
    109                   if (
    110 #ifdef  MISS_FAST
    111                       inst_decod_all ==
    112 #else
    113                       inst_all ==
    114 #endif
    115                       0)
     105                  if (condition)
    116106                    state = CONTEXT_STATE_KO_MISS_LOAD_ADDR;
    117107
     
    146136                {
    147137                  // Wait end of all instruction
    148 //                if (inst_all == 0)
    149                   if (
    150 #ifdef  MISS_FAST
    151                       inst_decod_all ==
    152 #else
    153                       inst_all ==
    154 #endif
    155                       0)
     138                  if (condition)
    156139//                  state = CONTEXT_STATE_OK; // @@@ TODO : make MISS fast (miss decod)
    157140                    state = CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR;
     
    333316#endif
    334317
     318              log_printf(TRACE,Context_State,FUNCTION,"    * state     : %s",toString(state).c_str());
    335319              log_printf(TRACE,Context_State,FUNCTION,"    * depth     : %d",depth     );
    336320              log_printf(TRACE,Context_State,FUNCTION,"    * depth_cur : %d",depth_cur );
     
    648632                          }
    649633                        }
     634
     635                      depth = (depth+1)%_param->_nb_inst_branch_speculated[context];
     636
    650637                      break;
    651638                    }
Note: See TracChangeset for help on using the changeset viewer.