Changeset 88 for 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
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (15 years ago)
- File:
-
- 1 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/src/Branch_Target_Buffer_Register_transition.cpp
r82 r88 22 22 void Branch_Target_Buffer_Register::transition (void) 23 23 { 24 log_printf(FUNC,Branch_Target_Buffer_Register,FUNCTION,"Begin"); 24 log_begin(Branch_Target_Buffer_Register,FUNCTION); 25 log_function(Branch_Target_Buffer_Register,FUNCTION,_name.c_str()); 25 26 26 27 if (PORT_READ(in_NRESET) == 0) … … 83 84 if (PORT_READ(in_UPDATE_VAL [i]) and internal_UPDATE_ACK [i]) 84 85 { 86 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," * UPDATE [%d]",i); 87 85 88 bool hit = internal_UPDATE_HIT [i]; 86 89 uint32_t num_bank = internal_UPDATE_NUM_BANK [i]; … … 89 92 90 93 // detect new branch !!! insert in branch target buffer 94 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," * hit : %d",hit); 95 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," * num_bank : %d",num_bank ); 96 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," * num_entry : %d",num_entry); 97 91 98 Tcounter_t accurate_new = 0; 92 99 … … 123 130 accurate_new = (miss_pred)?_param->_first_accurate_if_miss:_param->_first_accurate_if_hit; 124 131 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]); 130 } 132 // reg_BTB[num_bank][num_entry]._val = 1; 133 // reg_BTB[num_bank][num_entry]._context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 134 // reg_BTB[num_bank][num_entry]._address_src = PORT_READ(in_UPDATE_ADDRESS_SRC [i]); 135 // reg_BTB[num_bank][num_entry]._condition = PORT_READ(in_UPDATE_CONDITION [i]); 136 // reg_BTB[num_bank][num_entry]._last_take = PORT_READ(in_UPDATE_LAST_TAKE [i]); 137 reg_BTB[num_bank][num_entry]._address_dest_val = 0; 138 } 131 139 132 140 // =====[ All Case ] 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 } 141 // if (reg_BTB[num_bank][num_entry]._address_dest_val == 0) 142 // { 143 // reg_BTB[num_bank][num_entry]._address_dest_val = 1; 144 // reg_BTB[num_bank][num_entry]._address_dest = PORT_READ(in_UPDATE_ADDRESS_DEST [i]); 145 // } 146 reg_BTB[num_bank][num_entry]._val = 1; 147 reg_BTB[num_bank][num_entry]._context = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0; 148 reg_BTB[num_bank][num_entry]._address_src = PORT_READ(in_UPDATE_ADDRESS_SRC [i]); 149 reg_BTB[num_bank][num_entry]._condition = PORT_READ(in_UPDATE_CONDITION [i]); 150 reg_BTB[num_bank][num_entry]._last_take = PORT_READ(in_UPDATE_LAST_TAKE [i]); 151 reg_BTB[num_bank][num_entry]._address_dest_val = 1; 152 reg_BTB[num_bank][num_entry]._address_dest = PORT_READ(in_UPDATE_ADDRESS_DEST [i]); 138 153 reg_BTB[num_bank][num_entry]._accurate = accurate_new; 139 154 } 140 155 156 #if (DEBUG >= DEBUG_TRACE) and DEBUG_Branch_Target_Buffer_Register 157 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," * Dump BTB"); 141 158 for (uint32_t i=0; i<_param->_size_bank; i++) 142 159 for (uint32_t j=0; j<_param->_associativity; j++) 143 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," [%.4d][%.4d] %d - %.2d %.8x %.1d %.8x%.3d %.1d %.4d",160 log_printf(TRACE,Branch_Target_Buffer_Register,FUNCTION," [%.4d][%.4d] %d - %.4d %.8x (%.8x) %.1d %.8x (%.8x) %.3d %.1d %.4d", 144 161 i,j, 145 162 reg_BTB [i][j]._val , 146 163 reg_BTB [i][j]._context , 147 164 reg_BTB [i][j]._address_src , 165 reg_BTB [i][j]._address_src <<2, 148 166 reg_BTB [i][j]._address_dest_val, 149 167 reg_BTB [i][j]._address_dest , 168 reg_BTB [i][j]._address_dest<<2 , 150 169 reg_BTB [i][j]._condition , 151 170 reg_BTB [i][j]._last_take , 152 171 reg_BTB [i][j]._accurate ); 172 #endif 153 173 } 154 174 155 175 #if defined(STATISTICS) or defined(VHDL_TESTBENCH) 156 176 end_cycle (); 157 177 #endif 158 178 159 log_ printf(FUNC,Branch_Target_Buffer_Register,FUNCTION,"End");179 log_end(Branch_Target_Buffer_Register,FUNCTION); 160 180 }; 161 181
Note: See TracChangeset
for help on using the changeset viewer.