Changeset 82 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register
- Timestamp:
- May 1, 2008, 6:48:45 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1024 10 #define CYCLE_MAX (128*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Common/include/BitManipulation.h" 12 15 #include "Behavioural/include/Allocation.h" 13 14 #define NB_ITERATION 102415 #define CYCLE_MAX (128*NB_ITERATION)16 17 #define LABEL(str...) \18 { \19 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \20 msg (str); \21 msg (_("\n")); \22 } while(0)23 24 #define SC_START(cycle_offset) \25 do \26 { \27 /*cout << "SC_START (begin)" << endl;*/ \28 \29 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \30 if (cycle_offset != 0) \31 { \32 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \33 } \34 \35 if (cycle_current > CYCLE_MAX) \36 { \37 TEST_KO("Maximal cycles Reached"); \38 } \39 \40 sc_start(cycle_offset); \41 \42 /*cout << "SC_START (end )" << endl;*/ \43 } while(0)44 45 16 46 17 class entry_t … … 120 91 #endif 121 92 122 Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register (name.c_str(), 93 Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register 94 (name.c_str(), 123 95 #ifdef STATISTICS 124 96 _parameters_statistics, 125 97 #endif 126 _param); 98 _param, 99 USE_ALL); 127 100 128 101 #ifdef SYSTEMC … … 156 129 ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE ," in_DECOD_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_decod); 157 130 ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_decod); 131 ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE ," in_DECOD_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_decod); 158 132 ALLOC1_SC_SIGNAL( in_UPDATE_VAL ," in_UPDATE_VAL ",Tcontrol_t ,_param->_nb_inst_update); 159 133 ALLOC1_SC_SIGNAL(out_UPDATE_ACK ,"out_UPDATE_ACK ",Tcontrol_t ,_param->_nb_inst_update); … … 191 165 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VAL ,_param->_nb_inst_decod); 192 166 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_ACK ,_param->_nb_inst_decod); 167 if (_param->_have_port_victim) 168 { 193 169 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT ,_param->_nb_inst_decod); 194 if (_param->_have_port_victim)195 170 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT_INDEX ,_param->_nb_inst_decod); 196 if (_param->_have_port_victim)197 171 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VICTIM ,_param->_nb_inst_decod); 172 } 198 173 if (_param->_have_port_context_id) 199 174 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_CONTEXT_ID ,_param->_nb_inst_decod); … … 203 178 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_LAST_TAKE ,_param->_nb_inst_decod); 204 179 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod); 180 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_IS_ACCURATE ,_param->_nb_inst_decod); 205 181 206 182 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VAL ,_param->_nb_inst_update); 207 183 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_ACK ,_param->_nb_inst_update); 184 if (_param->_have_port_victim) 185 { 208 186 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT ,_param->_nb_inst_update); 209 if (_param->_have_port_victim)210 187 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT_INDEX ,_param->_nb_inst_update); 211 if (_param->_have_port_victim)212 188 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VICTIM ,_param->_nb_inst_update); 189 } 213 190 if (_param->_have_port_context_id) 214 191 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_CONTEXT_ID ,_param->_nb_inst_update); … … 297 274 in_DECOD_LAST_TAKE [i]->write(rand()%2); 298 275 in_DECOD_MISS_PREDICTION [i]->write(rand()%2); 276 in_DECOD_IS_ACCURATE [i]->write(rand()%2); 299 277 } 300 278 … … 478 456 delete [] in_DECOD_LAST_TAKE ; 479 457 delete [] in_DECOD_MISS_PREDICTION ; 458 delete [] in_DECOD_IS_ACCURATE ; 480 459 delete [] in_UPDATE_VAL ; 481 460 delete [] out_UPDATE_ACK ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h
r81 r82 87 87 public : SC_IN (Tcontrol_t ) ** in_DECOD_LAST_TAKE ; //[nb_inst_decod] 88 88 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_PREDICTION ; //[nb_inst_decod] 89 public : SC_IN (Tcontrol_t ) ** in_DECOD_IS_ACCURATE ; //[nb_inst_decod] 89 90 90 91 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 134 135 #endif 135 136 Parameters * param, 136 morpheo::behavioural::Tusage_t usage =USE_ALL137 morpheo::behavioural::Tusage_t usage 137 138 ); 138 139 public : ~Branch_Target_Buffer_Register (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register.cpp
r81 r82 139 139 # endif 140 140 141 if (_param->_have_port_victim) 142 { 141 143 log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_decod"); 142 144 … … 161 163 (*(out_DECOD_HIT [i])) (*(in_DECOD_CONTEXT_ID [i])); 162 164 163 if (_param->_have_port_victim)164 {165 165 (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_VAL [i])); 166 166 (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_ADDRESS_SRC [i])); 167 167 if (_param->_have_port_context_id) 168 168 (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_CONTEXT_ID [i])); 169 } 170 } 171 #endif 172 169 } 170 } 171 #endif 172 173 if (_param->_have_port_victim) 174 { 173 175 log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_update"); 174 176 … … 193 195 (*(out_UPDATE_HIT [i])) (*(in_UPDATE_CONTEXT_ID [i])); 194 196 195 if (_param->_have_port_victim)196 {197 197 (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_VAL [i])); 198 198 (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_ADDRESS_SRC [i])); 199 199 if (_param->_have_port_context_id) 200 200 (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_CONTEXT_ID [i])); 201 201 } 202 202 } 203 203 # endif -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_allocation.cpp
r81 r82 84 84 ALLOC1_VALACK_IN ( in_DECOD_VAL ,VAL); 85 85 ALLOC1_VALACK_OUT(out_DECOD_ACK ,ACK); 86 if (_param->_have_port_victim) 87 { 86 88 ALLOC1_SIGNAL_OUT(out_DECOD_HIT ,"hit" ,Tcontrol_t ,1); 87 89 ALLOC1_SIGNAL_OUT(out_DECOD_HIT_INDEX ,"hit_index" ,Tptr_t ,_param->_size_victim); 88 90 ALLOC1_SIGNAL_IN ( in_DECOD_VICTIM ,"victim" ,Tptr_t ,_param->_size_victim); 91 } 89 92 ALLOC1_SIGNAL_IN ( in_DECOD_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 90 93 ALLOC1_SIGNAL_IN ( in_DECOD_ADDRESS_SRC ,"address_src" ,Tgeneral_data_t ,_param->_size_address); … … 93 96 ALLOC1_SIGNAL_IN ( in_DECOD_LAST_TAKE ,"last_take" ,Tcontrol_t ,1); 94 97 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t ,1); 98 ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE ,"is_accurate" ,Tcontrol_t ,1); 95 99 } 96 100 … … 101 105 ALLOC1_VALACK_IN ( in_UPDATE_VAL ,VAL); 102 106 ALLOC1_VALACK_OUT(out_UPDATE_ACK ,ACK); 107 if (_param->_have_port_victim) 108 { 103 109 ALLOC1_SIGNAL_OUT(out_UPDATE_HIT ,"hit" ,Tcontrol_t ,1); 104 110 ALLOC1_SIGNAL_OUT(out_UPDATE_HIT_INDEX ,"hit_index" ,Tptr_t ,_param->_size_victim); 105 111 ALLOC1_SIGNAL_IN ( in_UPDATE_VICTIM ,"victim" ,Tptr_t ,_param->_size_victim); 112 } 106 113 ALLOC1_SIGNAL_IN ( in_UPDATE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 107 114 ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS_SRC ,"address_src" ,Tgeneral_data_t ,_param->_size_address); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_deallocation.cpp
r81 r82 54 54 delete [] in_DECOD_LAST_TAKE ; 55 55 delete [] in_DECOD_MISS_PREDICTION ; 56 delete [] in_DECOD_IS_ACCURATE ; 56 57 delete [] in_UPDATE_VAL ; 57 58 delete [] out_UPDATE_ACK ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_decod.cpp
r81 r82 48 48 internal_DECOD_NUM_ENTRY [i] = num_entry; 49 49 50 if (_param->_have_port_victim) 51 { 50 52 PORT_WRITE(out_DECOD_HIT [i], hit); 51 if (_param->_have_port_victim)52 53 PORT_WRITE(out_DECOD_HIT_INDEX [i], num_entry); 54 } 53 55 } 54 56 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_update.cpp
r81 r82 48 48 internal_UPDATE_NUM_ENTRY [i] = num_entry; 49 49 50 if (_param->_have_port_victim) 51 { 50 52 PORT_WRITE(out_UPDATE_HIT [i], hit); 51 if (_param->_have_port_victim)52 53 PORT_WRITE(out_UPDATE_HIT_INDEX [i], num_entry); 54 } 53 55 } 54 56 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_transition.cpp
r81 r82 32 32 else 33 33 { 34 if (not _param->_have_port_victim) 35 { 36 genMealy_decod (); 37 genMealy_update (); 38 } 39 34 40 // ======================================================= 35 41 // =====[ PREDICT ]======================================= … … 66 72 reg_BTB[num_bank][num_entry]._condition = cond; 67 73 reg_BTB[num_bank][num_entry]._last_take = PORT_READ(in_DECOD_LAST_TAKE [i]); 68 reg_BTB[num_bank][num_entry]._accurate = _param->_first_accurate_if_hit;74 reg_BTB[num_bank][num_entry]._accurate = (PORT_READ(in_DECOD_IS_ACCURATE [i]))?_param->_first_accurate_if_hit:_param->_first_accurate_if_miss; 69 75 } 70 76 // else (hit) : no update -> it's not the last result of the branch … … 116 122 117 123 accurate_new = (miss_pred)?_param->_first_accurate_if_miss:_param->_first_accurate_if_hit; 124 125 reg_BTB[num_bank][num_entry]._val = 1; 126 reg_BTB[num_bank][num_entry]._context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 127 reg_BTB[num_bank][num_entry]._address_src = PORT_READ(in_UPDATE_ADDRESS_SRC [i]); 128 reg_BTB[num_bank][num_entry]._condition = PORT_READ(in_UPDATE_CONDITION [i]); 129 reg_BTB[num_bank][num_entry]._last_take = PORT_READ(in_UPDATE_LAST_TAKE [i]); 118 130 } 119 131 120 132 // =====[ All Case ] 121 reg_BTB[num_bank][num_entry]._val = 1; 122 reg_BTB[num_bank][num_entry]._context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 123 reg_BTB[num_bank][num_entry]._address_src = PORT_READ(in_UPDATE_ADDRESS_SRC [i]); 124 reg_BTB[num_bank][num_entry]._condition = PORT_READ(in_UPDATE_CONDITION [i]); 125 126 reg_BTB[num_bank][num_entry]._address_dest_val = 1; 127 reg_BTB[num_bank][num_entry]._address_dest = PORT_READ(in_UPDATE_ADDRESS_DEST [i]); 128 reg_BTB[num_bank][num_entry]._last_take = PORT_READ(in_UPDATE_LAST_TAKE [i]); 133 if (reg_BTB[num_bank][num_entry]._address_dest_val == 0) 134 { 135 reg_BTB[num_bank][num_entry]._address_dest_val = 1; 136 reg_BTB[num_bank][num_entry]._address_dest = PORT_READ(in_UPDATE_ADDRESS_DEST [i]); 137 } 129 138 reg_BTB[num_bank][num_entry]._accurate = accurate_new; 130 139 }
Note: See TracChangeset
for help on using the changeset viewer.