- Timestamp:
- May 1, 2008, 6:48:45 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end
- Files:
-
- 62 added
- 71 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1 10 #define CYCLE_MAX (2048*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/include/test.h" 10 13 #include <list> 11 14 #include "Common/include/Test.h" 12 15 #include "Behavioural/include/Allocation.h" 13 14 #define NB_ITERATION 115 #define CYCLE_MAX (2048*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 16 45 17 class entry_t … … 151 123 #endif 152 124 153 Decod * _Decod = new Decod (name.c_str(), 125 Decod * _Decod = new Decod 126 (name.c_str(), 154 127 #ifdef STATISTICS 155 128 _parameters_statistics, 156 129 #endif 157 _param); 130 _param, 131 USE_ALL); 158 132 159 133 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h
r81 r82 159 159 #endif 160 160 Parameters * param, 161 morpheo::behavioural::Tusage_t usage =USE_ALL161 morpheo::behavioural::Tusage_t usage 162 162 ); 163 163 public : ~Decod (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h
r81 r82 66 66 public : ~Parameters () ; 67 67 68 public : std::stringmsg_error (void);68 public : Parameters_test msg_error (void); 69 69 70 public : std::string print (uint32_t depth);71 public : friend std::ostream& operator<< (std::ostream& output_stream,72 morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod::Parameters & x);70 public : std::string print (uint32_t depth); 71 public : friend std::ostream& operator<< (std::ostream& output_stream, 72 morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod::Parameters & x); 73 73 }; 74 74 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters_msg_error.cpp
r81 r82 21 21 #undef FUNCTION 22 22 #define FUNCTION "Decod::msg_error" 23 std::stringParameters::msg_error(void)23 Parameters_test Parameters::msg_error(void) 24 24 { 25 25 log_printf(FUNC,Decod,FUNCTION,"Begin"); 26 27 std::string msg = "";26 27 Parameters_test test("Decod"); 28 28 29 29 if (_nb_inst_decod == 0) 30 msg += " - nb_inst_decod must be > 0.\n";30 test.error(_("nb_inst_decod must be > 0.\n")); 31 31 32 32 if ((_size_general_data != 32) and 33 33 (_size_general_data != 64)) 34 msg += " - size_general_data must be equal at 32 or 64 bits.\n";34 test.error(_("size_general_data must be equal at 32 or 64 bits.\n")); 35 35 36 36 if ((_nb_branch_speculated == 0) or 37 37 (_nb_branch_speculated > _nb_context)) 38 msg += " - nb_branch_speculated must be in [1:nb_context].\n";38 test.error(_("nb_branch_speculated must be in [1:nb_context].\n")); 39 39 40 40 if ((_nb_context_select == 0) or 41 41 (_nb_context_select > _nb_context)) 42 msg += " - nb_context_select must be in [1:nb_context].\n";42 test.error(_("nb_context_select must be in [1:nb_context].\n")); 43 43 44 44 if ((_priority != PRIORITY_ROUND_ROBIN)) 45 msg += " - Unsupported priority scheme. Supported scheme are : "+toString(PRIORITY_ROUND_ROBIN)+".\n";45 test.error(toString(_("Unsupported priority scheme. Supported scheme are : %s.\n"),toString(PRIORITY_ROUND_ROBIN).c_str())); 46 46 47 47 if ((_load_balancing != LOAD_BALANCING_MAXIMUM_FOR_PRIORITY)) 48 msg += " - Unsupported load_balancing scheme. Supported scheme are : "+toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY)+".\n";48 test.error(toString(_("Unsupported load_balancing scheme. Supported scheme are : %s.\n"),toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY).c_str())); 49 49 50 return msg;50 return test; 51 51 52 52 log_printf(FUNC,Decod,FUNCTION,"End"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 10 #define NB_ITERATION 1024 11 #define CYCLE_MAX (128*NB_ITERATION) 12 9 13 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/include/test.h" 10 14 #include "Common/include/Test.h" 11 15 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 102414 #define CYCLE_MAX (128*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 /*cout << "SC_START (begin)" << endl;*/ \27 \28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \29 if (cycle_offset != 0) \30 { \31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \32 } \33 \34 if (cycle_current > CYCLE_MAX) \35 { \36 TEST_KO("Maximal cycles Reached"); \37 } \38 \39 sc_start(cycle_offset); \40 \41 /*cout << "SC_START (end )" << endl;*/ \42 } while(0)43 16 44 17 void test (string name, … … 51 24 #endif 52 25 53 Address_management * _Address_management = new Address_management (name.c_str(), 26 Address_management * _Address_management = new Address_management 27 (name.c_str(), 54 28 #ifdef STATISTICS 55 29 _parameters_statistics, 56 30 #endif 57 _param); 31 _param, 32 USE_ALL); 58 33 59 34 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h
r81 r82 132 132 #endif 133 133 Parameters * param, 134 morpheo::behavioural::Tusage_t usage =USE_ALL134 morpheo::behavioural::Tusage_t usage 135 135 ); 136 136 public : ~Address_management (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_transition.cpp
r81 r82 79 79 reg_PC_CURRENT_BRANCH_UPDATE_PREDICTION_ID = PORT_READ(in_PREDICT_BRANCH_UPDATE_PREDICTION_ID); 80 80 81 #error "INSTRUCTION_ENABLE : ERROR implémentation, remplacer PC_PREVIOUS par PC_NEXT_NEXT"81 // #error "INSTRUCTION_ENABLE : ERROR implémentation, remplacer PC_PREVIOUS par PC_NEXT_NEXT" 82 82 83 83 for (uint32_t i=0; i<_param->_nb_instruction; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1 10 #define CYCLE_MAX (2048*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" … … 12 15 #include <list> 13 16 #include <set> 14 15 #define NB_ITERATION 116 #define CYCLE_MAX (2048*NB_ITERATION)17 18 #define LABEL(str...) \19 { \20 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \21 msg (str); \22 msg (_("\n")); \23 } while(0)24 25 #define SC_START(cycle_offset) \26 do \27 { \28 /*cout << "SC_START (begin)" << endl;*/ \29 \30 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \31 if (cycle_offset != 0) \32 { \33 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \34 } \35 \36 if (cycle_current > CYCLE_MAX) \37 { \38 TEST_KO("Maximal cycles Reached"); \39 } \40 \41 sc_start(cycle_offset); \42 \43 /*cout << "SC_START (end )" << endl;*/ \44 } while(0)45 46 17 47 18 class entry_t … … 70 41 #endif 71 42 72 Ifetch_queue * _Ifetch_queue = new Ifetch_queue (name.c_str(), 43 Ifetch_queue * _Ifetch_queue = new Ifetch_queue 44 (name.c_str(), 73 45 #ifdef STATISTICS 74 46 _parameters_statistics, 75 47 #endif 76 _param); 48 _param, 49 USE_ALL); 77 50 78 51 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h
r81 r82 131 131 #endif 132 132 Parameters * param, 133 morpheo::behavioural::Tusage_t usage =USE_ALL133 morpheo::behavioural::Tusage_t usage 134 134 ); 135 135 public : ~Ifetch_queue (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1 10 #define CYCLE_MAX (128*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 114 #define CYCLE_MAX (128*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 /*cout << "SC_START (begin)" << endl;*/ \27 \28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \29 if (cycle_offset != 0) \30 { \31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \32 } \33 \34 if (cycle_current > CYCLE_MAX) \35 { \36 TEST_KO("Maximal cycles Reached"); \37 } \38 \39 sc_start(cycle_offset); \40 \41 /*cout << "SC_START (end )" << endl;*/ \42 } while(0)43 15 44 16 void test (string name, … … 51 23 #endif 52 24 53 Ifetch_unit_Glue * _Ifetch_unit_Glue = new Ifetch_unit_Glue (name.c_str(), 25 Ifetch_unit_Glue * _Ifetch_unit_Glue = new Ifetch_unit_Glue 26 (name.c_str(), 54 27 #ifdef STATISTICS 55 28 _parameters_statistics, 56 29 #endif 57 _param); 30 _param, 31 USE_ALL); 58 32 59 33 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/include/Ifetch_unit_Glue.h
r81 r82 105 105 #endif 106 106 Parameters * param, 107 morpheo::behavioural::Tusage_t usage =USE_ALL107 morpheo::behavioural::Tusage_t usage 108 108 ); 109 109 public : ~Ifetch_unit_Glue (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1 10 #define CYCLE_MAX (128*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 114 #define CYCLE_MAX (128*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 /*cout << "SC_START (begin)" << endl;*/ \27 \28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \29 if (cycle_offset != 0) \30 { \31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \32 } \33 \34 if (cycle_current > CYCLE_MAX) \35 { \36 TEST_KO("Maximal cycles Reached"); \37 } \38 \39 sc_start(cycle_offset); \40 \41 /*cout << "SC_START (end )" << endl;*/ \42 } while(0)43 15 44 16 void test (string name, … … 51 23 #endif 52 24 53 Ifetch_unit * _Ifetch_unit = new Ifetch_unit (name.c_str(), 25 Ifetch_unit * _Ifetch_unit = new Ifetch_unit 26 (name.c_str(), 54 27 #ifdef STATISTICS 55 _parameters_statistics, 56 #endif 57 _param); 28 _parameters_statistics, 29 #endif 30 _param, 31 USE_ALL); 58 32 59 33 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.h
r81 r82 136 136 #endif 137 137 Parameters * param, 138 morpheo::behavioural::Tusage_t usage =USE_ALL138 morpheo::behavioural::Tusage_t usage 139 139 ); 140 140 public : ~Ifetch_unit (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit_allocation.cpp
r81 r82 144 144 ,param_statistics 145 145 #endif 146 ,_param->_param_address_management); 146 ,_param->_param_address_management 147 ,_usage); 147 148 148 149 _component->set_component (_component_address_management->_component … … 162 163 ,param_statistics 163 164 #endif 164 ,_param->_param_ifetch_queue); 165 ,_param->_param_ifetch_queue 166 ,_usage); 165 167 166 168 _component->set_component (_component_ifetch_queue->_component … … 180 182 ,param_statistics 181 183 #endif 182 ,_param->_param_ifetch_unit_glue); 184 ,_param->_param_ifetch_unit_glue 185 ,_usage); 183 186 184 187 _component->set_component (_component_ifetch_unit_glue->_component -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 1 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_Glue/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 114 #define CYCLE_MAX (128*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 /*cout << "SC_START (begin)" << endl;*/ \27 \28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \29 if (cycle_offset != 0) \30 { \31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \32 } \33 \34 if (cycle_current > CYCLE_MAX) \35 { \36 TEST_KO("Maximal cycles Reached"); \37 } \38 \39 sc_start(cycle_offset); \40 \41 /*cout << "SC_START (end )" << endl;*/ \42 } while(0)43 15 44 16 void test (string name, … … 51 23 #endif 52 24 53 Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue (name.c_str(), 25 Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue 26 (name.c_str(), 54 27 #ifdef STATISTICS 55 _parameters_statistics, 56 #endif 57 _param); 28 _parameters_statistics, 29 #endif 30 _param, 31 USE_ALL); 58 32 59 33 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h
r81 r82 139 139 #endif 140 140 Parameters * param, 141 morpheo::behavioural::Tusage_t usage =USE_ALL141 morpheo::behavioural::Tusage_t usage 142 142 ); 143 143 public : ~Branch_Target_Buffer_Glue (void); -
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 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/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/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 102414 #define CYCLE_MAX (128*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 /*cout << "SC_START (begin)" << endl;*/ \27 \28 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \29 if (cycle_offset != 0) \30 { \31 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \32 } \33 \34 if (cycle_current > CYCLE_MAX) \35 { \36 TEST_KO("Maximal cycles Reached"); \37 } \38 \39 sc_start(cycle_offset); \40 \41 /*cout << "SC_START (end )" << endl;*/ \42 } while(0)43 15 44 16 void test (string name, … … 51 23 #endif 52 24 53 Branch_Target_Buffer * _Branch_Target_Buffer = new Branch_Target_Buffer (name.c_str(), 25 Branch_Target_Buffer * _Branch_Target_Buffer = new Branch_Target_Buffer 26 (name.c_str(), 54 27 #ifdef STATISTICS 55 28 _parameters_statistics, 56 29 #endif 57 _param); 30 _param, 31 USE_ALL); 58 32 59 33 #ifdef SYSTEMC … … 84 58 ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE ," in_DECOD_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_decod); 85 59 ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_decod); 60 ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE ," in_DECOD_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_decod); 86 61 ALLOC1_SC_SIGNAL( in_UPDATE_VAL ," in_UPDATE_VAL ",Tcontrol_t ,_param->_nb_inst_update); 87 62 ALLOC1_SC_SIGNAL(out_UPDATE_ACK ,"out_UPDATE_ACK ",Tcontrol_t ,_param->_nb_inst_update); … … 122 97 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_LAST_TAKE ,_param->_nb_inst_decod); 123 98 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod); 99 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_IS_ACCURATE ,_param->_nb_inst_decod); 124 100 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_VAL ,_param->_nb_inst_update); 125 101 INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_UPDATE_ACK ,_param->_nb_inst_update); … … 195 171 delete [] in_DECOD_LAST_TAKE ; 196 172 delete [] in_DECOD_MISS_PREDICTION ; 173 delete [] in_DECOD_IS_ACCURATE ; 197 174 198 175 delete [] in_UPDATE_VAL ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h
r81 r82 90 90 public : SC_IN (Tcontrol_t ) ** in_DECOD_LAST_TAKE ; //[nb_inst_decod] 91 91 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_PREDICTION ; //[nb_inst_decod] 92 public : SC_IN (Tcontrol_t ) ** in_DECOD_IS_ACCURATE ; //[nb_inst_decod] 92 93 93 94 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 130 131 #endif 131 132 Parameters * param, 132 morpheo::behavioural::Tusage_t usage =USE_ALL133 morpheo::behavioural::Tusage_t usage 133 134 ); 134 135 public : ~Branch_Target_Buffer (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_allocation.cpp
r81 r82 85 85 ALLOC1_SIGNAL_IN ( in_DECOD_LAST_TAKE ,"last_take" ,Tcontrol_t ,1); 86 86 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t ,1); 87 ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE ,"is_accurate" ,Tcontrol_t ,1); 87 88 } 88 89 … … 111 112 { 112 113 name = _name+"_sort_"+toString(i); 113 std::cout << "Create : " << name << std::endl;114 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 114 115 115 116 _component_sort [i] = new morpheo::behavioural::generic::sort::Sort … … 118 119 ,param_statistics 119 120 #endif 120 ,_param->_param_sort); 121 ,_param->_param_sort 122 ,_usage); 121 123 122 124 _component->set_component (_component_sort [i] ->_component … … 129 131 { 130 132 name = _name+"_victim"; 131 std::cout << "Create : " << name << std::endl;133 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 132 134 133 135 _component_victim = new morpheo::behavioural::generic::victim::Victim … … 136 138 ,param_statistics 137 139 #endif 138 ,_param->_param_victim); 140 ,_param->_param_victim 141 ,_usage); 139 142 140 143 _component->set_component (_component_victim->_component … … 148 151 { 149 152 name = _name+"_glue"; 150 std::cout << "Create : " << name << std::endl;153 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 151 154 152 155 _component_branch_target_buffer_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_glue::Branch_Target_Buffer_Glue … … 155 158 ,param_statistics 156 159 #endif 157 ,_param->_param_branch_target_buffer_glue); 160 ,_param->_param_branch_target_buffer_glue 161 ,_usage); 158 162 159 163 _component->set_component (_component_branch_target_buffer_glue->_component … … 166 170 { 167 171 name = _name+"_register"; 168 std::cout << "Create : " << name << std::endl;172 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 169 173 170 174 _component_branch_target_buffer_register = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_register::Branch_Target_Buffer_Register … … 173 177 ,param_statistics 174 178 #endif 175 ,_param->_param_branch_target_buffer_register); 179 ,_param->_param_branch_target_buffer_register 180 ,_usage); 176 181 177 182 _component->set_component (_component_branch_target_buffer_register->_component … … 194 199 { 195 200 src = _name+"_sort_"+toString(i); 196 std::cout << "Instance : " << src << std::endl;201 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 197 202 198 203 { … … 230 235 { 231 236 src = _name+"_victim"; 232 std::cout << "Instance : " << src << std::endl;237 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 233 238 234 239 { … … 256 261 { 257 262 src = _name+"_glue"; 258 std::cout << "Instance : " << src << std::endl;263 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 259 264 260 265 { … … 312 317 313 318 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_HIT" , 314 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_HIT" );319 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_HIT" ); 315 320 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_ADDRESS_SRC" , 316 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC" );321 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_ADDRESS_SRC" ); 317 322 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_ADDRESS_DEST", 318 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST");323 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_ADDRESS_DEST"); 319 324 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_CONDITION" , 320 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_CONDITION" );325 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_CONDITION" ); 321 326 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_LAST_TAKE" , 322 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_LAST_TAKE" );327 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_LAST_TAKE" ); 323 328 COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_IS_ACCURATE" , 324 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_IS_ACCURATE" );329 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+ "_IS_ACCURATE" ); 325 330 } 326 331 … … 460 465 { 461 466 src = _name+"_register"; 462 std::cout << "Instance : " << src << std::endl;467 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 463 468 464 469 { … … 519 524 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_MISS_PREDICTION", 520 525 dest, "in_DECOD_"+toString(i)+"_MISS_PREDICTION"); 526 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_IS_ACCURATE", 527 dest, "in_DECOD_"+toString(i)+"_IS_ACCURATE"); 521 528 522 529 if (_param->_have_component_victim) … … 583 590 } 584 591 // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 585 _component->test_map();592 // _component->test_map(); 586 593 587 594 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_deallocation.cpp
r81 r82 49 49 delete [] in_DECOD_LAST_TAKE ; 50 50 delete [] in_DECOD_MISS_PREDICTION ; 51 delete [] in_DECOD_IS_ACCURATE ; 51 52 52 53 delete [] in_UPDATE_VAL ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/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/Direction/Direction_Glue/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" … … 12 15 #include "Behavioural/include/Allocation.h" 13 16 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 17 void test (string name, 46 18 morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::direction_glue::Parameters * _param) … … 52 24 #endif 53 25 54 Direction_Glue * _Direction_Glue = new Direction_Glue (name.c_str(), 26 Direction_Glue * _Direction_Glue = new Direction_Glue 27 (name.c_str(), 55 28 #ifdef STATISTICS 56 _parameters_statistics, 57 #endif 58 _param); 29 _parameters_statistics, 30 #endif 31 _param, 32 USE_ALL); 59 33 60 34 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h
r81 r82 114 114 #endif 115 115 Parameters * param, 116 morpheo::behavioural::Tusage_t usage =USE_ALL116 morpheo::behavioural::Tusage_t usage 117 117 ); 118 118 public : ~Direction_Glue (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/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/Direction/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" … … 12 15 #include "Behavioural/include/Allocation.h" 13 16 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 17 void test (string name, 46 18 morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::Parameters * _param) … … 52 24 #endif 53 25 54 Direction * _Direction = new Direction (name.c_str(), 26 Direction * _Direction = new Direction 27 (name.c_str(), 55 28 #ifdef STATISTICS 56 _parameters_statistics, 57 #endif 58 _param); 29 _parameters_statistics, 30 #endif 31 _param, 32 USE_ALL); 59 33 60 34 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h
r81 r82 102 102 #endif 103 103 Parameters * param, 104 morpheo::behavioural::Tusage_t usage =USE_ALL104 morpheo::behavioural::Tusage_t usage 105 105 ); 106 106 public : ~Direction (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_allocation.cpp
r81 r82 21 21 #undef FUNCTION 22 22 #define FUNCTION "Direction::allocation" 23 void Direction::allocation ( 23 void Direction::allocation 24 ( 24 25 #ifdef STATISTICS 25 26 morpheo::behavioural::Parameters_Statistics * param_statistics 26 27 #else 27 28 void 28 29 #endif 29 30 ) 30 31 { 31 32 log_printf(FUNC,Direction,FUNCTION,"Begin"); … … 85 86 { 86 87 name = _name+"_glue"; 87 std::cout << "Create : " << name << std::endl;88 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 88 89 89 90 _component_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::direction_glue::Direction_Glue … … 92 93 ,param_statistics 93 94 #endif 94 ,_param->_param_glue); 95 ,_param->_param_glue 96 ,_usage); 95 97 96 98 _component->set_component (_component_glue->_component … … 106 108 { 107 109 src = _name+"_glue"; 108 std::cout << "Instance : " << src << std::endl;110 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 109 111 110 112 { … … 177 179 } 178 180 // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 179 _component->test_map();181 // _component->test_map(); 180 182 181 183 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Makefile.deps
r81 r82 25 25 include $(DIR_MORPHEO)/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/Makefile.deps 26 26 endif 27 ifndef Prediction_unit_Glue 28 include $(DIR_MORPHEO)/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/Makefile.deps 29 endif 27 30 28 31 #-----[ Directory ]---------------------------------------- … … 37 40 $(Direction_LIBRARY) \ 38 41 $(Return_Address_Stack_LIBRARY) \ 39 $(Update_Prediction_Table_LIBRARY) 40 42 $(Update_Prediction_Table_LIBRARY) \ 43 $(Prediction_unit_Glue_LIBRARY) 41 44 42 45 Prediction_unit_DIR_LIBRARY = -L$(Prediction_unit_DIR)/lib \ … … 45 48 $(Direction_DIR_LIBRARY) \ 46 49 $(Return_Address_Stack_DIR_LIBRARY) \ 47 $(Update_Prediction_Table_DIR_LIBRARY) 50 $(Update_Prediction_Table_DIR_LIBRARY) \ 51 $(Prediction_unit_Glue_DIR_LIBRARY) 48 52 49 53 … … 57 61 $(MAKE) Return_Address_Stack_library; \ 58 62 $(MAKE) Update_Prediction_Table_library; \ 63 $(MAKE) Prediction_unit_Glue_library; \ 59 64 $(MAKE) --directory=$(Prediction_unit_DIR) --makefile=Makefile; 60 65 … … 66 71 $(MAKE) Return_Address_Stack_library_clean; \ 67 72 $(MAKE) Update_Prediction_Table_library_clean; \ 73 $(MAKE) Prediction_unit_Glue_library_clean; \ 68 74 $(MAKE) --directory=$(Prediction_unit_DIR) --makefile=Makefile clean; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_mono_context.cfg
r81 r82 1 1 Prediction_unit_Glue 2 1 1 +1 # nb_context 3 30 30 +32 # size_address 4 1 4 *4 # nb_instruction [0] [nb_context] 5 1 4 *4 # size_depth [0] [nb_context] 6 1 1 *4 # nb_inst_predict 7 4 4 *4 # nb_inst_decod 8 4 4 *4 # nb_inst_update 2 1 1 *4 # nb_context 3 1 1 *4 # nb_decod_unit 4 30 30 +32 # size_address 5 1 1 *4 # nb_instruction [0] [nb_context] 6 1 1 *4 # size_depth [0] [nb_context] 7 4 4 *4 # nb_inst_decod [0] [nb_decod_unit] 8 1 1 *4 # nb_inst_branch_predict 9 4 4 *4 # nb_inst_branch_decod 10 4 4 *4 # nb_inst_branch_update -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_multi_context.cfg
r81 r82 1 1 Prediction_unit_Glue 2 4 4 +1 # nb_context 3 30 30 +32 # size_address 2 4 4 *4 # nb_context 3 1 1 *4 # nb_decod_unit 4 30 30 +32 # size_address 4 5 1 1 *4 # nb_instruction [0] [nb_context] 5 6 2 2 *4 # nb_instruction [1] [nb_context] … … 8 9 2 2 *4 # size_depth [0] [nb_context] 9 10 1 1 *4 # size_depth [1] [nb_context] 10 8 8*4 # size_depth [2] [nb_context]11 7 7 *4 # size_depth [2] [nb_context] 11 12 4 4 *4 # size_depth [3] [nb_context] 12 1 4 *4 # nb_inst_predict 13 4 4 *4 # nb_inst_decod 14 4 4 *4 # nb_inst_update 13 4 4 *4 # nb_inst_decod [0] [nb_decod_unit] 14 1 4 *4 # nb_inst_branch_predict 15 4 4 *4 # nb_inst_branch_decod 16 4 4 *4 # nb_inst_branch_update -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/main.cpp
r81 r82 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/include/test.h" 9 9 10 #define NB_PARAMS 510 #define NB_PARAMS 6 11 11 12 12 void usage (int argc, char * argv[]) … … 14 14 err (_("<Usage> %s name_instance list_params.\n"),argv[0]); 15 15 err (_("list_params is :\n")); 16 err (_(" * nb_context (uint32_t)\n")); 17 err (_(" * size_address (uint32_t)\n")); 18 err (_(" * nb_instruction [nb_context] (uint32_t)\n")); 19 err (_(" * size_depth [nb_context] (uint32_t)\n")); 20 err (_(" * nb_inst_predict (uint32_t)\n")); 21 err (_(" * nb_inst_decod (uint32_t)\n")); 22 err (_(" * nb_inst_update (uint32_t)\n")); 16 err (_(" * nb_context (uint32_t)\n")); 17 err (_(" * nb_decod_unit (uint32_t)\n")); 18 // err (_(" * nb_ooo_engine (uint32_t)\n")); 19 err (_(" * size_address (uint32_t)\n")); 20 err (_(" * nb_instruction [nb_context] (uint32_t)\n")); 21 err (_(" * size_depth [nb_context] (uint32_t)\n")); 22 err (_(" * nb_inst_decod [nb_decod_unit] (uint32_t)\n")); 23 // err (_(" * nb_inst_update [nb_ooo_engine] (uint32_t)\n")); 24 err (_(" * nb_inst_branch_predict (uint32_t)\n")); 25 err (_(" * nb_inst_branch_decod (uint32_t)\n")); 26 err (_(" * nb_inst_branch_update (uint32_t)\n")); 23 27 24 28 exit (1); … … 39 43 40 44 uint32_t _nb_context = fromString<uint32_t>(argv[x++]); 45 uint32_t _nb_decod_unit = fromString<uint32_t>(argv[x++]); 46 // uint32_t _nb_ooo_engine = fromString<uint32_t>(argv[x++]); 41 47 uint32_t _size_address = fromString<uint32_t>(argv[x++]); 42 48 43 if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_context)) 49 if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_context+_nb_decod_unit// +_nb_ooo_engine 50 )) 44 51 usage (argc, argv); 45 52 … … 50 57 for (uint32_t i=0; i<_nb_context; i++) 51 58 _size_depth [i] = fromString<uint32_t>(argv[x++]); 52 uint32_t _nb_inst_predict = fromString<uint32_t>(argv[x++]); 53 uint32_t _nb_inst_decod = fromString<uint32_t>(argv[x++]); 54 uint32_t _nb_inst_update = fromString<uint32_t>(argv[x++]); 59 uint32_t * _nb_inst_decod = new uint32_t [_nb_decod_unit]; 60 for (uint32_t i=0; i<_nb_decod_unit; i++) 61 _nb_inst_decod [i] = fromString<uint32_t>(argv[x++]); 62 // uint32_t * _nb_inst_update = new uint32_t [_nb_ooo_engine]; 63 // for (uint32_t i=0; i<_nb_ooo_engine; i++) 64 // _nb_inst_update [i] = fromString<uint32_t>(argv[x++]); 65 uint32_t _nb_inst_branch_predict = fromString<uint32_t>(argv[x++]); 66 uint32_t _nb_inst_branch_update = fromString<uint32_t>(argv[x++]); 67 uint32_t _nb_inst_branch_decod = fromString<uint32_t>(argv[x++]); 55 68 56 69 int _return = EXIT_SUCCESS; … … 58 71 { 59 72 morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Parameters 60 (_nb_context , 61 _size_address , 62 _nb_instruction , 63 _size_depth , 64 _nb_inst_predict, 65 _nb_inst_decod , 66 _nb_inst_update ); 73 (_nb_context , 74 _nb_decod_unit , 75 // _nb_ooo_engine , 76 _size_address , 77 _nb_instruction , 78 _size_depth , 79 _nb_inst_decod , 80 // _nb_inst_update , 81 _nb_inst_branch_predict, 82 _nb_inst_branch_decod , 83 _nb_inst_branch_update ); 67 84 68 85 msg(_("%s"),param->print(1).c_str()); … … 83 100 delete [] _nb_instruction; 84 101 delete [] _size_depth ; 102 delete [] _nb_inst_decod ; 103 // delete [] _nb_inst_update; 85 104 86 105 return (_return); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/test.cpp
r81 r82 63 63 ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_STATE ,"out_PREDICT_BRANCH_STATE ",Tbranch_state_t ,_param->_nb_context); 64 64 ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ,"out_PREDICT_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t ,_param->_nb_context); 65 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_VAL ,"out_PREDICT_BTB_VAL ",Tcontrol_t ,_param->_nb_inst_ predict);66 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ACK ," in_PREDICT_BTB_ACK ",Tcontrol_t ,_param->_nb_inst_ predict);67 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,"out_PREDICT_BTB_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_ predict);68 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS ,"out_PREDICT_BTB_ADDRESS ",Taddress_t ,_param->_nb_inst_ predict);69 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_HIT ," in_PREDICT_BTB_HIT ",Tcontrol_t ,_param->_nb_inst_ predict);70 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ," in_PREDICT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_ predict);71 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ," in_PREDICT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_ predict);72 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_CONDITION ," in_PREDICT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_ predict);73 //ALLOC1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE ," in_PREDICT_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_ predict);74 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ," in_PREDICT_BTB_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_ predict);75 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_VAL ,"out_PREDICT_DIR_VAL ",Tcontrol_t ,_param->_nb_inst_ predict);76 ALLOC1_SC_SIGNAL( in_PREDICT_DIR_ACK ," in_PREDICT_DIR_ACK ",Tcontrol_t ,_param->_nb_inst_ predict);77 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,"out_PREDICT_DIR_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_ predict);78 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_STATIC ,"out_PREDICT_DIR_STATIC ",Tcontrol_t ,_param->_nb_inst_ predict);79 //ALLOC1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,"out_PREDICT_DIR_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_ predict);80 //ALLOC1_SC_SIGNAL( in_PREDICT_DIR_HISTORY ," in_PREDICT_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_ predict);81 ALLOC1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION ," in_PREDICT_DIR_DIRECTION ",Tcontrol_t ,_param->_nb_inst_ predict);82 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_VAL ,"out_PREDICT_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_ predict);83 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ACK ," in_PREDICT_RAS_ACK ",Tcontrol_t ,_param->_nb_inst_ predict);84 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,"out_PREDICT_RAS_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_ predict);85 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_HIT ," in_PREDICT_RAS_HIT ",Tcontrol_t ,_param->_nb_inst_ predict);86 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_PUSH ,"out_PREDICT_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_ predict);87 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,"out_PREDICT_RAS_ADDRESS_PUSH ",Taddress_t ,_param->_nb_inst_ predict);88 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ," in_PREDICT_RAS_ADDRESS_POP ",Taddress_t ,_param->_nb_inst_ predict);89 //ALLOC1_SC_SIGNAL( in_PREDICT_RAS_INDEX ," in_PREDICT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_ predict);90 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_VAL ,"out_PREDICT_UPT_VAL ",Tcontrol_t ,_param->_nb_inst_ predict);91 ALLOC1_SC_SIGNAL( in_PREDICT_UPT_ACK ," in_PREDICT_UPT_ACK ",Tcontrol_t ,_param->_nb_inst_ predict);92 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,"out_PREDICT_UPT_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_ predict);93 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,"out_PREDICT_UPT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_ predict);94 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,"out_PREDICT_UPT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_ predict);95 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,"out_PREDICT_UPT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_ predict);96 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,"out_PREDICT_UPT_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_ predict);97 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,"out_PREDICT_UPT_BTB_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_ predict);98 //ALLOC1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,"out_PREDICT_UPT_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_ predict);99 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,"out_PREDICT_UPT_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_ predict);100 //ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,"out_PREDICT_UPT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_ predict);65 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_VAL ,"out_PREDICT_BTB_VAL ",Tcontrol_t ,_param->_nb_inst_branch_predict); 66 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ACK ," in_PREDICT_BTB_ACK ",Tcontrol_t ,_param->_nb_inst_branch_predict); 67 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,"out_PREDICT_BTB_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_predict); 68 ALLOC1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS ,"out_PREDICT_BTB_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_predict); 69 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_HIT ," in_PREDICT_BTB_HIT ",Tcontrol_t ,_param->_nb_inst_branch_predict); 70 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ," in_PREDICT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_predict); 71 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ," in_PREDICT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_predict); 72 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_CONDITION ," in_PREDICT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_predict); 73 //ALLOC1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE ," in_PREDICT_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_predict); 74 ALLOC1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ," in_PREDICT_BTB_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_branch_predict); 75 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_VAL ,"out_PREDICT_DIR_VAL ",Tcontrol_t ,_param->_nb_inst_branch_predict); 76 ALLOC1_SC_SIGNAL( in_PREDICT_DIR_ACK ," in_PREDICT_DIR_ACK ",Tcontrol_t ,_param->_nb_inst_branch_predict); 77 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,"out_PREDICT_DIR_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_predict); 78 ALLOC1_SC_SIGNAL(out_PREDICT_DIR_STATIC ,"out_PREDICT_DIR_STATIC ",Tcontrol_t ,_param->_nb_inst_branch_predict); 79 //ALLOC1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,"out_PREDICT_DIR_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_predict); 80 //ALLOC1_SC_SIGNAL( in_PREDICT_DIR_HISTORY ," in_PREDICT_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_branch_predict); 81 ALLOC1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION ," in_PREDICT_DIR_DIRECTION ",Tcontrol_t ,_param->_nb_inst_branch_predict); 82 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_VAL ,"out_PREDICT_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_branch_predict); 83 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ACK ," in_PREDICT_RAS_ACK ",Tcontrol_t ,_param->_nb_inst_branch_predict); 84 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,"out_PREDICT_RAS_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_predict); 85 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_HIT ," in_PREDICT_RAS_HIT ",Tcontrol_t ,_param->_nb_inst_branch_predict); 86 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_PUSH ,"out_PREDICT_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_branch_predict); 87 ALLOC1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,"out_PREDICT_RAS_ADDRESS_PUSH ",Taddress_t ,_param->_nb_inst_branch_predict); 88 ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ," in_PREDICT_RAS_ADDRESS_POP ",Taddress_t ,_param->_nb_inst_branch_predict); 89 //ALLOC1_SC_SIGNAL( in_PREDICT_RAS_INDEX ," in_PREDICT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_predict); 90 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_VAL ,"out_PREDICT_UPT_VAL ",Tcontrol_t ,_param->_nb_inst_branch_predict); 91 ALLOC1_SC_SIGNAL( in_PREDICT_UPT_ACK ," in_PREDICT_UPT_ACK ",Tcontrol_t ,_param->_nb_inst_branch_predict); 92 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,"out_PREDICT_UPT_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_predict); 93 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,"out_PREDICT_UPT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_predict); 94 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,"out_PREDICT_UPT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_predict); 95 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,"out_PREDICT_UPT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_predict); 96 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,"out_PREDICT_UPT_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_predict); 97 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,"out_PREDICT_UPT_BTB_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_branch_predict); 98 //ALLOC1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,"out_PREDICT_UPT_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_branch_predict); 99 ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,"out_PREDICT_UPT_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_predict); 100 //ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,"out_PREDICT_UPT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_predict); 101 101 ALLOC1_SC_SIGNAL( in_DEPTH_UPT_NB_BRANCH ," in_DEPTH_UPT_NB_BRANCH ",Tdepth_t ,_param->_nb_context); 102 102 ALLOC1_SC_SIGNAL( in_DEPTH_UPT_TAIL ," in_DEPTH_UPT_TAIL ",Tdepth_t ,_param->_nb_context); 103 ALLOC1_SC_SIGNAL(out_DEPTH_NB_BRANCH ,"out_DEPTH_NB_BRANCH ",Tdepth_t ,_param->_nb_context); 104 ALLOC1_SC_SIGNAL(out_DEPTH_TAIL ,"out_DEPTH_TAIL ",Tdepth_t ,_param->_nb_context); 105 106 ALLOC2_SC_SIGNAL( in_DECOD_VAL ," in_DECOD_VAL ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 107 ALLOC2_SC_SIGNAL(out_DECOD_ACK ,"out_DECOD_ACK ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 108 ALLOC2_SC_SIGNAL( in_DECOD_CONTEXT_ID ," in_DECOD_CONTEXT_ID ",Tcontext_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 109 ALLOC2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ," in_DECOD_MATCH_INST_IFETCH_PTR ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 110 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_STATE ," in_DECOD_BRANCH_STATE ",Tbranch_state_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 111 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID," in_DECOD_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 112 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION ," in_DECOD_BRANCH_CONDITION ",Tbranch_condition_t,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 113 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION ," in_DECOD_BRANCH_DIRECTION ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 114 ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_SRC ," in_DECOD_ADDRESS_SRC ",Taddress_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 115 ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_DEST ," in_DECOD_ADDRESS_DEST ",Taddress_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 116 ALLOC1_SC_SIGNAL(out_DECOD_BTB_VAL ,"out_DECOD_BTB_VAL ",Tcontrol_t ,_param->_nb_inst_branch_decod); 117 ALLOC1_SC_SIGNAL( in_DECOD_BTB_ACK ," in_DECOD_BTB_ACK ",Tcontrol_t ,_param->_nb_inst_branch_decod); 118 ALLOC1_SC_SIGNAL(out_DECOD_BTB_CONTEXT_ID ,"out_DECOD_BTB_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_decod); 119 ALLOC1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_SRC ,"out_DECOD_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_decod); 120 ALLOC1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_DEST ,"out_DECOD_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_decod); 121 ALLOC1_SC_SIGNAL(out_DECOD_BTB_CONDITION ,"out_DECOD_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_decod); 122 ALLOC1_SC_SIGNAL(out_DECOD_BTB_LAST_TAKE ,"out_DECOD_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_decod); 123 ALLOC1_SC_SIGNAL(out_DECOD_BTB_MISS_PREDICTION ,"out_DECOD_BTB_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_decod); 124 ALLOC1_SC_SIGNAL(out_DECOD_BTB_IS_ACCURATE ,"out_DECOD_BTB_IS_ACCURATE ",Tcontrol_t ,_param->_nb_inst_branch_decod); 125 ALLOC1_SC_SIGNAL(out_DECOD_RAS_VAL ,"out_DECOD_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_branch_decod); 126 ALLOC1_SC_SIGNAL( in_DECOD_RAS_ACK ," in_DECOD_RAS_ACK ",Tcontrol_t ,_param->_nb_inst_branch_decod); 127 ALLOC1_SC_SIGNAL(out_DECOD_RAS_CONTEXT_ID ,"out_DECOD_RAS_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_decod); 128 ALLOC1_SC_SIGNAL( in_DECOD_RAS_HIT ," in_DECOD_RAS_HIT ",Tcontrol_t ,_param->_nb_inst_branch_decod); 129 ALLOC1_SC_SIGNAL(out_DECOD_RAS_PUSH ,"out_DECOD_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_branch_decod); 130 ALLOC1_SC_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH ,"out_DECOD_RAS_ADDRESS_PUSH ",Taddress_t ,_param->_nb_inst_branch_decod); 131 ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS_POP ," in_DECOD_RAS_ADDRESS_POP ",Taddress_t ,_param->_nb_inst_branch_decod); 132 //ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX ," in_DECOD_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_decod); 133 ALLOC1_SC_SIGNAL(out_DECOD_RAS_MISS_PREDICTION ,"out_DECOD_RAS_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_decod); 134 ALLOC1_SC_SIGNAL(out_DECOD_UPT_VAL ,"out_DECOD_UPT_VAL ",Tcontrol_t ,_param->_nb_inst_branch_decod); 135 ALLOC1_SC_SIGNAL( in_DECOD_UPT_ACK ," in_DECOD_UPT_ACK ",Tcontrol_t ,_param->_nb_inst_branch_decod); 136 ALLOC1_SC_SIGNAL(out_DECOD_UPT_CONTEXT_ID ,"out_DECOD_UPT_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_decod); 137 ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC ,"out_DECOD_UPT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_decod); 138 ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST ,"out_DECOD_UPT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_decod); 139 ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_CONDITION ,"out_DECOD_UPT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_decod); 140 ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE ,"out_DECOD_UPT_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_decod); 141 ALLOC1_SC_SIGNAL(out_DECOD_UPT_RAS_ADDRESS ,"out_DECOD_UPT_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_decod); 142 //ALLOC1_SC_SIGNAL(out_DECOD_UPT_RAS_INDEX ,"out_DECOD_UPT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_decod); 143 ALLOC1_SC_SIGNAL(out_DECOD_UPT_MISS_IFETCH ,"out_DECOD_UPT_MISS_IFETCH ",Tcontrol_t ,_param->_nb_inst_branch_decod); 144 ALLOC1_SC_SIGNAL(out_DECOD_UPT_MISS_DECOD ,"out_DECOD_UPT_MISS_DECOD ",Tcontrol_t ,_param->_nb_inst_branch_decod); 145 ALLOC1_SC_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID ,"out_DECOD_UPT_UPDATE_PREDICTION_ID ",Tprediction_ptr_t ,_param->_nb_inst_branch_decod); 103 146 147 ALLOC1_SC_SIGNAL(out_UPDATE_BTB_VAL ,"out_UPDATE_BTB_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 148 ALLOC1_SC_SIGNAL( in_UPDATE_BTB_ACK ," in_UPDATE_BTB_ACK ",Tcontrol_t ,_param->_nb_inst_branch_update); 149 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_CONTEXT_ID ,"out_UPDATE_BTB_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_update); 150 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC ,"out_UPDATE_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_update); 151 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST ,"out_UPDATE_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_update); 152 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_CONDITION ,"out_UPDATE_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_update); 153 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_LAST_TAKE ,"out_UPDATE_BTB_LAST_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_update); 154 //ALLOC1_SC_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION ,"out_UPDATE_BTB_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_update); 155 ALLOC1_SC_SIGNAL(out_UPDATE_DIR_VAL ,"out_UPDATE_DIR_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 156 ALLOC1_SC_SIGNAL( in_UPDATE_DIR_ACK ," in_UPDATE_DIR_ACK ",Tcontrol_t ,_param->_nb_inst_branch_update); 157 //ALLOC1_SC_SIGNAL(out_UPDATE_DIR_ADDRESS ,"out_UPDATE_DIR_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_update); 158 //ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY ,"out_UPDATE_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_branch_update); 159 //ALLOC1_SC_SIGNAL(out_UPDATE_DIR_DIRECTION ,"out_UPDATE_DIR_DIRECTION ",Tcontrol_t ,_param->_nb_inst_branch_update); 160 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL ,"out_UPDATE_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 161 ALLOC1_SC_SIGNAL( in_UPDATE_RAS_ACK ," in_UPDATE_RAS_ACK ",Tcontrol_t ,_param->_nb_inst_branch_update); 162 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_CONTEXT_ID ,"out_UPDATE_RAS_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_update); 163 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH ,"out_UPDATE_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_branch_update); 164 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS ,"out_UPDATE_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_update); 165 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX ,"out_UPDATE_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_update); 166 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION ,"out_UPDATE_RAS_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_update); 167 //ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH ,"out_UPDATE_RAS_PREDICTION_IFETCH ",Tcontrol_t ,_param->_nb_inst_branch_update); 168 ALLOC1_SC_SIGNAL( in_UPDATE_UPT_VAL ," in_UPDATE_UPT_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 169 ALLOC1_SC_SIGNAL(out_UPDATE_UPT_ACK ,"out_UPDATE_UPT_ACK ",Tcontrol_t ,_param->_nb_inst_branch_update); 170 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_CONTEXT_ID ," in_UPDATE_UPT_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_update); 171 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION ," in_UPDATE_UPT_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_update); 172 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD ," in_UPDATE_UPT_DIRECTION_GOOD ",Tcontrol_t ,_param->_nb_inst_branch_update); 173 ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_VAL ," in_UPDATE_UPT_BTB_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 174 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC ," in_UPDATE_UPT_BTB_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_update); 175 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST ," in_UPDATE_UPT_BTB_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_update); 176 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_CONDITION ," in_UPDATE_UPT_BTB_CONDITION ",Tbranch_condition_t,_param->_nb_inst_branch_update); 177 ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIR_VAL ," in_UPDATE_UPT_DIR_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 178 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIR_HISTORY ," in_UPDATE_UPT_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_branch_update); 179 ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_VAL ," in_UPDATE_UPT_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_branch_update); 180 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_PUSH ," in_UPDATE_UPT_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_branch_update); 181 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS ," in_UPDATE_UPT_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_update); 182 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_INDEX ," in_UPDATE_UPT_RAS_INDEX ",Tptr_t ,_param->_nb_inst_branch_update); 183 //ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH," in_UPDATE_UPT_RAS_PREDICTION_IFETCH",Tcontrol_t ,_param->_nb_inst_branch_update); 184 104 185 /******************************************************** 105 186 * Instanciation … … 119 200 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_PC_NEXT_IS_DS_TAKE ,_param->_nb_context); 120 201 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_INSTRUCTION_ENABLE ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]); 202 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_STATE ,_param->_nb_context); 121 203 for (uint32_t i=0; i<_param->_nb_context; i++) 122 204 { … … 126 208 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]); 127 209 } 128 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_STATE ,_param->_nb_context); 129 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_VAL ,_param->_nb_inst_ predict);130 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ACK ,_param->_nb_inst_ predict);210 211 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_VAL ,_param->_nb_inst_branch_predict); 212 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ACK ,_param->_nb_inst_branch_predict); 131 213 if (_param->_have_port_context_id) 132 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_predict); 133 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_predict); 134 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_HIT ,_param->_nb_inst_predict); 135 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_predict); 136 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_predict); 137 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_CONDITION ,_param->_nb_inst_predict); 138 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_predict); 139 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_predict); 140 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_VAL ,_param->_nb_inst_predict); 141 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_ACK ,_param->_nb_inst_predict); 142 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_predict); 143 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_STATIC ,_param->_nb_inst_predict); 144 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_predict); 145 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_HISTORY ,_param->_nb_inst_predict); 146 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_predict); 147 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_VAL ,_param->_nb_inst_predict); 148 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ACK ,_param->_nb_inst_predict); 214 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_branch_predict); 215 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_branch_predict); 216 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_HIT ,_param->_nb_inst_branch_predict); 217 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 218 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict); 219 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_CONDITION ,_param->_nb_inst_branch_predict); 220 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict); 221 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict); 222 223 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_VAL ,_param->_nb_inst_branch_predict); 224 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_ACK ,_param->_nb_inst_branch_predict); 225 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 226 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_STATIC ,_param->_nb_inst_branch_predict); 227 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_branch_predict); 228 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_HISTORY ,_param->_nb_inst_branch_predict); 229 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_branch_predict); 230 231 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_VAL ,_param->_nb_inst_branch_predict); 232 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ACK ,_param->_nb_inst_branch_predict); 233 149 234 if (_param->_have_port_context_id) 150 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_ predict);151 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_HIT ,_param->_nb_inst_ predict);152 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_PUSH ,_param->_nb_inst_ predict);153 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_ predict);154 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_ predict);155 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_INDEX ,_param->_nb_inst_ predict);156 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_VAL ,_param->_nb_inst_ predict);157 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_UPT_ACK ,_param->_nb_inst_ predict);235 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_branch_predict); 236 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_HIT ,_param->_nb_inst_branch_predict); 237 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_PUSH ,_param->_nb_inst_branch_predict); 238 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_predict); 239 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_branch_predict); 240 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_INDEX ,_param->_nb_inst_branch_predict); 241 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_VAL ,_param->_nb_inst_branch_predict); 242 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_UPT_ACK ,_param->_nb_inst_branch_predict); 158 243 if (_param->_have_port_context_id) 159 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_predict); 160 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_predict); 161 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_predict); 162 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_predict); 163 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_predict); 164 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_predict); 165 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_predict); 166 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_predict); 167 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_predict); 244 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_branch_predict); 245 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 246 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict); 247 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_branch_predict); 248 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict); 249 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict); 250 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_branch_predict); 251 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_predict); 252 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_branch_predict); 253 254 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 255 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 256 if (_param->_have_port_context_id) 257 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 258 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 259 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 260 if (_param->_have_port_max_depth) 261 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 262 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 263 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 264 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 265 INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 266 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_VAL ,_param->_nb_inst_branch_decod); 267 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BTB_ACK ,_param->_nb_inst_branch_decod); 268 if (_param->_have_port_context_id) 269 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_CONTEXT_ID ,_param->_nb_inst_branch_decod); 270 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod); 271 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod); 272 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_CONDITION ,_param->_nb_inst_branch_decod); 273 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod); 274 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_MISS_PREDICTION ,_param->_nb_inst_branch_decod); 275 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_IS_ACCURATE ,_param->_nb_inst_branch_decod); 276 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_VAL ,_param->_nb_inst_branch_decod); 277 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_ACK ,_param->_nb_inst_branch_decod); 278 if (_param->_have_port_context_id) 279 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_CONTEXT_ID ,_param->_nb_inst_branch_decod); 280 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_HIT ,_param->_nb_inst_branch_decod); 281 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_PUSH ,_param->_nb_inst_branch_decod); 282 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_decod); 283 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_ADDRESS_POP ,_param->_nb_inst_branch_decod); 284 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_INDEX ,_param->_nb_inst_branch_decod); 285 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_MISS_PREDICTION ,_param->_nb_inst_branch_decod); 286 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_VAL ,_param->_nb_inst_branch_decod); 287 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_UPT_ACK ,_param->_nb_inst_branch_decod); 288 if (_param->_have_port_context_id) 289 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_CONTEXT_ID ,_param->_nb_inst_branch_decod); 290 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod); 291 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod); 292 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_CONDITION ,_param->_nb_inst_branch_decod); 293 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod); 294 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_decod); 295 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_RAS_INDEX ,_param->_nb_inst_branch_decod); 296 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_MISS_IFETCH ,_param->_nb_inst_branch_decod); 297 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_MISS_DECOD ,_param->_nb_inst_branch_decod); 298 if (_param->_have_port_max_depth) 299 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_UPDATE_PREDICTION_ID ,_param->_nb_inst_branch_decod); 300 301 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_VAL ,_param->_nb_inst_branch_update); 302 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_BTB_ACK ,_param->_nb_inst_branch_update); 303 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_CONTEXT_ID ,_param->_nb_inst_branch_update); 304 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update); 305 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update); 306 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_CONDITION ,_param->_nb_inst_branch_update); 307 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_LAST_TAKE ,_param->_nb_inst_branch_update); 308 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_MISS_PREDICTION ,_param->_nb_inst_branch_update); 309 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_VAL ,_param->_nb_inst_branch_update); 310 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_DIR_ACK ,_param->_nb_inst_branch_update); 311 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_ADDRESS ,_param->_nb_inst_branch_update); 312 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_HISTORY ,_param->_nb_inst_branch_update); 313 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_DIRECTION ,_param->_nb_inst_branch_update); 314 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_VAL ,_param->_nb_inst_branch_update); 315 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_RAS_ACK ,_param->_nb_inst_branch_update); 316 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_CONTEXT_ID ,_param->_nb_inst_branch_update); 317 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_PUSH ,_param->_nb_inst_branch_update); 318 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_ADDRESS ,_param->_nb_inst_branch_update); 319 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_INDEX ,_param->_nb_inst_branch_update); 320 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_MISS_PREDICTION ,_param->_nb_inst_branch_update); 321 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_PREDICTION_IFETCH ,_param->_nb_inst_branch_update); 322 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_VAL ,_param->_nb_inst_branch_update); 323 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_UPT_ACK ,_param->_nb_inst_branch_update); 324 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_CONTEXT_ID ,_param->_nb_inst_branch_update); 325 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_MISS_PREDICTION ,_param->_nb_inst_branch_update); 326 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIRECTION_GOOD ,_param->_nb_inst_branch_update); 327 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_VAL ,_param->_nb_inst_branch_update); 328 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update); 329 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update); 330 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_CONDITION ,_param->_nb_inst_branch_update); 331 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIR_VAL ,_param->_nb_inst_branch_update); 332 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIR_HISTORY ,_param->_nb_inst_branch_update); 333 INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_VAL ,_param->_nb_inst_branch_update); 334 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_PUSH ,_param->_nb_inst_branch_update); 335 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_update); 336 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_INDEX ,_param->_nb_inst_branch_update); 337 //INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update); 338 168 339 for (uint32_t i=0; i<_param->_nb_context; i++) 169 340 { 170 341 if (_param->_have_port_depth [i]) 171 342 { 343 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL [i]); 344 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_TAIL [i]); 345 } 172 346 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_NB_BRANCH [i]); 173 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL [i]); 174 } 347 INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_NB_BRANCH [i]); 175 348 } 176 349 … … 191 364 192 365 int32_t percent_transaction_predict = 75; 366 int32_t percent_transaction_decod = 75; 193 367 194 368 SC_START(0); … … 199 373 for (uint32_t i=0; i<_param->_nb_context; i++) 200 374 in_PREDICT_VAL [i]->write(0); 201 for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)375 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 202 376 { 203 377 in_PREDICT_BTB_ACK [i]->write(0); … … 208 382 in_PREDICT_BTB_IS_ACCURATE [i]->write(1); 209 383 } 384 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 385 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 386 in_DECOD_VAL [i][j]->write(0); 210 387 211 388 in_NRESET->write(0); … … 237 414 do 238 415 { 239 for (uint32_t j=0; j<_param->_nb_inst_ predict; j++)416 for (uint32_t j=0; j<_param->_nb_inst_branch_predict; j++) 240 417 in_PREDICT_BTB_ACK [j]->write(0); 241 418 … … 245 422 246 423 uint32_t port; 247 for (port=0; port<_param->_nb_inst_ predict; port++)424 for (port=0; port<_param->_nb_inst_branch_predict; port++) 248 425 { 249 426 if (_param->_have_port_context_id) … … 289 466 for (uint32_t i=0; i<_param->_nb_context; i++) 290 467 in_PREDICT_VAL [i]->write(0); 291 for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)468 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 292 469 { 293 470 in_PREDICT_BTB_ACK [i]->write(0); … … 319 496 do 320 497 { 321 for (uint32_t j=0; j<_param->_nb_inst_ predict; j++)498 for (uint32_t j=0; j<_param->_nb_inst_branch_predict; j++) 322 499 in_PREDICT_BTB_ACK [j]->write(0); 323 500 … … 327 504 328 505 uint32_t port; 329 for (port=0; port<_param->_nb_inst_ predict; port++)506 for (port=0; port<_param->_nb_inst_branch_predict; port++) 330 507 { 331 508 if (_param->_have_port_context_id) … … 355 532 356 533 TEST(Taddress_t ,out_PREDICT_PC_NEXT [context]->read(),addr_dest); 357 // TEST(Tcontrol_t ,out_PREDICT_PC_NEXT_IS_DS_TAKE [context]->read(),0);534 TEST(Tcontrol_t ,out_PREDICT_PC_NEXT_IS_DS_TAKE [context]->read(),i==(_param->_nb_instruction [context]-1)); 358 535 TEST(Tinst_ifetch_ptr_t,out_PREDICT_INST_IFETCH_PTR [context]->read(),i); 359 536 TEST(Tbranch_state_t ,out_PREDICT_BRANCH_STATE [context]->read(),BRANCH_STATE_NSPEC_TAKE); 360 537 // TEST(Tprediction_ptr_t ,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [context]->read(),0); 361 362 // for (uint32_t j=0; j<i; j++) 363 // TEST(Tcontrol_t ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),0); 364 // for (uint32_t j=i; j<_param->_nb_instruction[context]; j++) 365 // TEST(Tcontrol_t ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),1); 366 538 539 uint32_t k=((addr_src%_param->_nb_instruction[context])==_param->_nb_instruction[context]-1)?_param->_nb_instruction[context]:((addr_src%_param->_nb_instruction[context])+2); 540 LABEL("instruction enable : "); 541 LABEL(" [0:%d[ = 1",k); 542 LABEL(" [%d:%d[ = 1",k,_param->_nb_instruction[context]); 543 for (uint32_t j=0; j<k; j++) 544 TEST(Tcontrol_t ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),1); 545 for (uint32_t j=k; j<_param->_nb_instruction[context]; j++) 546 TEST(Tcontrol_t ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),0); 547 367 548 TEST(Tcontrol_t ,out_PREDICT_BTB_VAL [port]->read(),1); 368 549 TEST(Tcontext_t ,out_PREDICT_BTB_CONTEXT_ID [port]->read(),context); 369 550 TEST(Taddress_t ,out_PREDICT_BTB_ADDRESS [port]->read(),addr); 370 551 } 371 552 372 553 SC_START(1); 373 554 … … 376 557 for (uint32_t i=0; i<_param->_nb_context; i++) 377 558 in_PREDICT_VAL [i]->write(0); 378 for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)559 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 379 560 { 380 561 in_PREDICT_BTB_ACK [i]->write(0); … … 386 567 } 387 568 569 { 570 LABEL("Decod - Ok"); 571 uint32_t decod_unit = rand()%_param->_nb_decod_unit; 572 LABEL("decod_unit : %d",decod_unit); 573 574 for (uint32_t i=0; i<_param->_nb_inst_decod[i];i++) 575 { 576 Tcontext_t context = i%_param->_nb_context; 577 in_DECOD_CONTEXT_ID [decod_unit][i]->write(context); 578 in_DECOD_MATCH_INST_IFETCH_PTR [decod_unit][i]->write(1); 579 in_DECOD_BRANCH_STATE [decod_unit][i]->write(BRANCH_STATE_NSPEC_TAKE); 580 581 bool find = false; 582 do 583 { 584 in_DECOD_VAL [decod_unit][i]->write((rand()%100)<percent_transaction_decod); 585 in_DECOD_BRANCH_UPDATE_PREDICTION_ID [decod_unit][i]->write(rand()%_param->_size_depth[context]); 586 587 in_DECOD_BTB_ACK[0]->write((rand()%100)<percent_transaction_decod); 588 in_DECOD_RAS_ACK[0]->write((rand()%100)<percent_transaction_decod); 589 in_DECOD_UPT_ACK[0]->write((rand()%100)<percent_transaction_decod); 590 591 SC_START(0); 592 593 LABEL("DECOD[%d][%d] - %d %d",decod_unit,i,in_DECOD_VAL[decod_unit][i]->read(),out_DECOD_ACK[decod_unit][i]->read()); 594 if (in_DECOD_VAL[decod_unit][i]->read() and out_DECOD_ACK[decod_unit][i]->read()) 595 { 596 LABEL("DECOD[%d][%d] - Transaction Accepted",decod_unit,i); 597 TEST(Tcontrol_t, in_DECOD_UPT_ACK[0]->read(),1); 598 TEST(Tcontrol_t,out_DECOD_BTB_VAL[0]->read(),0); 599 TEST(Tcontrol_t,out_DECOD_RAS_VAL[0]->read(),0); 600 TEST(Tcontrol_t,out_DECOD_UPT_VAL[0]->read(),1); 601 find = true; 602 } 603 604 SC_START(1); 605 606 } while (not find); 607 608 in_DECOD_VAL [decod_unit][i]->write(0); 609 in_DECOD_BTB_ACK[0]->write(0); 610 in_DECOD_RAS_ACK[0]->write(0); 611 in_DECOD_UPT_ACK[0]->write(0); 612 } 613 } 614 615 { 616 LABEL("Decod - Ko"); 617 uint32_t decod_unit = rand()%_param->_nb_decod_unit; 618 LABEL("decod_unit : %d",decod_unit); 619 620 for (uint32_t i=0; i<_param->_nb_inst_decod[i];i++) 621 { 622 Tcontext_t context = i%_param->_nb_context; 623 in_DECOD_CONTEXT_ID [decod_unit][i]->write(context); 624 in_DECOD_MATCH_INST_IFETCH_PTR [decod_unit][i]->write(0); 625 in_DECOD_BRANCH_STATE [decod_unit][i]->write(BRANCH_STATE_SPEC_TAKE); 626 in_DECOD_BRANCH_UPDATE_PREDICTION_ID [decod_unit][i]->write(i%_param->_max_size_depth); 627 in_DECOD_BRANCH_CONDITION [decod_unit][i]->write(BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK); 628 in_DECOD_BRANCH_DIRECTION [decod_unit][i]->write(1); 629 in_DECOD_ADDRESS_SRC [decod_unit][i]->write(0xdeadbeef+i); 630 in_DECOD_ADDRESS_DEST [decod_unit][i]->write(0x11061979+i); 631 632 633 bool find = false; 634 do 635 { 636 in_DECOD_VAL [decod_unit][i]->write((rand()%100)<percent_transaction_decod); 637 638 in_DECOD_BTB_ACK[0]->write((rand()%100)<percent_transaction_decod); 639 in_DECOD_RAS_ACK[0]->write((rand()%100)<percent_transaction_decod); 640 in_DECOD_UPT_ACK[0]->write((rand()%100)<percent_transaction_decod); 641 642 in_DECOD_RAS_HIT[0]->write(1); 643 in_DECOD_RAS_ADDRESS_POP[0]->write(0xdadedead+i); 644 645 646 SC_START(0); 647 648 LABEL("DECOD[%d][%d] - %d %d",decod_unit,i,in_DECOD_VAL[decod_unit][i]->read(),out_DECOD_ACK[decod_unit][i]->read()); 649 if (in_DECOD_VAL[decod_unit][i]->read() and out_DECOD_ACK[decod_unit][i]->read()) 650 { 651 LABEL("DECOD[%d][%d] - Transaction Accepted",decod_unit,i); 652 TEST(Tcontrol_t , in_DECOD_UPT_ACK [0]->read(),1); 653 TEST(Tcontrol_t ,out_DECOD_BTB_VAL [0]->read(),1); 654 TEST(Tcontrol_t ,out_DECOD_RAS_VAL [0]->read(),1); 655 TEST(Tcontrol_t ,out_DECOD_UPT_VAL [0]->read(),1); 656 657 TEST(Tcontext_t ,out_DECOD_BTB_CONTEXT_ID [0]->read(),context); 658 TEST(Taddress_t ,out_DECOD_BTB_ADDRESS_SRC [0]->read(),0xdeadbeef+i); 659 TEST(Taddress_t ,out_DECOD_BTB_ADDRESS_DEST [0]->read(),0x11061979+i); 660 TEST(Tbranch_condition_t,out_DECOD_BTB_CONDITION [0]->read(),BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK); 661 TEST(Tcontrol_t ,out_DECOD_BTB_LAST_TAKE [0]->read(),1); 662 TEST(Tcontrol_t ,out_DECOD_BTB_MISS_PREDICTION [0]->read(),1); 663 TEST(Tcontrol_t ,out_DECOD_BTB_IS_ACCURATE [0]->read(),0); 664 TEST(Tcontext_t ,out_DECOD_RAS_CONTEXT_ID [0]->read(),context); 665 TEST(Tcontrol_t ,out_DECOD_RAS_PUSH [0]->read(),1); 666 TEST(Taddress_t ,out_DECOD_RAS_ADDRESS_PUSH [0]->read(),0x11061979+i); 667 TEST(Tcontrol_t ,out_DECOD_RAS_MISS_PREDICTION [0]->read(),1); 668 TEST(Tcontext_t ,out_DECOD_UPT_CONTEXT_ID [0]->read(),context); 669 TEST(Taddress_t ,out_DECOD_UPT_BTB_ADDRESS_SRC [0]->read(),0xdeadbeef+i); 670 TEST(Taddress_t ,out_DECOD_UPT_BTB_ADDRESS_DEST [0]->read(),0x11061979+i); 671 TEST(Tbranch_condition_t,out_DECOD_UPT_BTB_CONDITION [0]->read(),BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK); 672 TEST(Tcontrol_t ,out_DECOD_UPT_BTB_LAST_TAKE [0]->read(),1); 673 TEST(Taddress_t ,out_DECOD_UPT_RAS_ADDRESS [0]->read(),0xdadedead+i); 674 TEST(Tcontrol_t ,out_DECOD_UPT_MISS_IFETCH [0]->read(),1); 675 TEST(Tcontrol_t ,out_DECOD_UPT_MISS_DECOD [0]->read(),0); 676 TEST(Tprediction_ptr_t ,out_DECOD_UPT_UPDATE_PREDICTION_ID [0]->read(),i%_param->_max_size_depth); 677 678 find = true; 679 } 680 681 SC_START(1); 682 683 } while (not find); 684 685 in_DECOD_VAL [decod_unit][i]->write(0); 686 in_DECOD_BTB_ACK[0]->write(0); 687 in_DECOD_RAS_ACK[0]->write(0); 688 in_DECOD_UPT_ACK[0]->write(0); 689 } 690 } 388 691 389 692 SC_START(1); … … 413 716 DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_STATE ,_param->_nb_context); 414 717 DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ,_param->_nb_context); 415 DELETE1_SC_SIGNAL(out_PREDICT_BTB_VAL ,_param->_nb_inst_ predict);416 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ACK ,_param->_nb_inst_ predict);417 DELETE1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_ predict);418 DELETE1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_ predict);419 DELETE1_SC_SIGNAL( in_PREDICT_BTB_HIT ,_param->_nb_inst_ predict);420 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_ predict);421 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_ predict);422 DELETE1_SC_SIGNAL( in_PREDICT_BTB_CONDITION ,_param->_nb_inst_ predict);423 //DELETE1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_ predict);424 DELETE1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_ predict);425 DELETE1_SC_SIGNAL(out_PREDICT_DIR_VAL ,_param->_nb_inst_ predict);426 DELETE1_SC_SIGNAL( in_PREDICT_DIR_ACK ,_param->_nb_inst_ predict);427 DELETE1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_ predict);428 DELETE1_SC_SIGNAL(out_PREDICT_DIR_STATIC ,_param->_nb_inst_ predict);429 //DELETE1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_ predict);430 //DELETE1_SC_SIGNAL( in_PREDICT_DIR_HISTORY ,_param->_nb_inst_ predict);431 DELETE1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_ predict);432 DELETE1_SC_SIGNAL(out_PREDICT_RAS_VAL ,_param->_nb_inst_ predict);433 DELETE1_SC_SIGNAL( in_PREDICT_RAS_ACK ,_param->_nb_inst_ predict);434 DELETE1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_ predict);435 DELETE1_SC_SIGNAL( in_PREDICT_RAS_HIT ,_param->_nb_inst_ predict);436 DELETE1_SC_SIGNAL(out_PREDICT_RAS_PUSH ,_param->_nb_inst_ predict);437 DELETE1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_ predict);438 DELETE1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_ predict);439 //DELETE1_SC_SIGNAL( in_PREDICT_RAS_INDEX ,_param->_nb_inst_ predict);440 DELETE1_SC_SIGNAL(out_PREDICT_UPT_VAL ,_param->_nb_inst_ predict);441 DELETE1_SC_SIGNAL( in_PREDICT_UPT_ACK ,_param->_nb_inst_ predict);442 DELETE1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_ predict);443 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_ predict);444 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_ predict);445 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_ predict);446 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_ predict);447 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_ predict);448 //DELETE1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_ predict);449 DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_ predict);450 //DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_ predict);718 DELETE1_SC_SIGNAL(out_PREDICT_BTB_VAL ,_param->_nb_inst_branch_predict); 719 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ACK ,_param->_nb_inst_branch_predict); 720 DELETE1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_branch_predict); 721 DELETE1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_branch_predict); 722 DELETE1_SC_SIGNAL( in_PREDICT_BTB_HIT ,_param->_nb_inst_branch_predict); 723 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 724 DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict); 725 DELETE1_SC_SIGNAL( in_PREDICT_BTB_CONDITION ,_param->_nb_inst_branch_predict); 726 //DELETE1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict); 727 DELETE1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict); 728 DELETE1_SC_SIGNAL(out_PREDICT_DIR_VAL ,_param->_nb_inst_branch_predict); 729 DELETE1_SC_SIGNAL( in_PREDICT_DIR_ACK ,_param->_nb_inst_branch_predict); 730 DELETE1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 731 DELETE1_SC_SIGNAL(out_PREDICT_DIR_STATIC ,_param->_nb_inst_branch_predict); 732 //DELETE1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_branch_predict); 733 //DELETE1_SC_SIGNAL( in_PREDICT_DIR_HISTORY ,_param->_nb_inst_branch_predict); 734 DELETE1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_branch_predict); 735 DELETE1_SC_SIGNAL(out_PREDICT_RAS_VAL ,_param->_nb_inst_branch_predict); 736 DELETE1_SC_SIGNAL( in_PREDICT_RAS_ACK ,_param->_nb_inst_branch_predict); 737 DELETE1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_branch_predict); 738 DELETE1_SC_SIGNAL( in_PREDICT_RAS_HIT ,_param->_nb_inst_branch_predict); 739 DELETE1_SC_SIGNAL(out_PREDICT_RAS_PUSH ,_param->_nb_inst_branch_predict); 740 DELETE1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_predict); 741 DELETE1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_branch_predict); 742 //DELETE1_SC_SIGNAL( in_PREDICT_RAS_INDEX ,_param->_nb_inst_branch_predict); 743 DELETE1_SC_SIGNAL(out_PREDICT_UPT_VAL ,_param->_nb_inst_branch_predict); 744 DELETE1_SC_SIGNAL( in_PREDICT_UPT_ACK ,_param->_nb_inst_branch_predict); 745 DELETE1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_branch_predict); 746 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict); 747 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict); 748 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_branch_predict); 749 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict); 750 DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict); 751 //DELETE1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_branch_predict); 752 DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_predict); 753 //DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_branch_predict); 451 754 DELETE1_SC_SIGNAL( in_DEPTH_UPT_NB_BRANCH ,_param->_nb_context); 452 755 DELETE1_SC_SIGNAL( in_DEPTH_UPT_TAIL ,_param->_nb_context); 756 DELETE1_SC_SIGNAL(out_DEPTH_NB_BRANCH ,_param->_nb_context); 757 DELETE1_SC_SIGNAL(out_DEPTH_TAIL ,_param->_nb_context); 758 759 DELETE2_SC_SIGNAL( in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 760 DELETE2_SC_SIGNAL(out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 761 DELETE2_SC_SIGNAL( in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 762 DELETE2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 763 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 764 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 765 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 766 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 767 DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 768 DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 769 DELETE1_SC_SIGNAL(out_DECOD_BTB_VAL ,_param->_nb_inst_branch_decod); 770 DELETE1_SC_SIGNAL( in_DECOD_BTB_ACK ,_param->_nb_inst_branch_decod); 771 DELETE1_SC_SIGNAL(out_DECOD_BTB_CONTEXT_ID ,_param->_nb_inst_branch_decod); 772 DELETE1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod); 773 DELETE1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod); 774 DELETE1_SC_SIGNAL(out_DECOD_BTB_CONDITION ,_param->_nb_inst_branch_decod); 775 DELETE1_SC_SIGNAL(out_DECOD_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod); 776 DELETE1_SC_SIGNAL(out_DECOD_BTB_MISS_PREDICTION ,_param->_nb_inst_branch_decod); 777 DELETE1_SC_SIGNAL(out_DECOD_BTB_IS_ACCURATE ,_param->_nb_inst_branch_decod); 778 DELETE1_SC_SIGNAL(out_DECOD_RAS_VAL ,_param->_nb_inst_branch_decod); 779 DELETE1_SC_SIGNAL( in_DECOD_RAS_ACK ,_param->_nb_inst_branch_decod); 780 DELETE1_SC_SIGNAL(out_DECOD_RAS_CONTEXT_ID ,_param->_nb_inst_branch_decod); 781 DELETE1_SC_SIGNAL( in_DECOD_RAS_HIT ,_param->_nb_inst_branch_decod); 782 DELETE1_SC_SIGNAL(out_DECOD_RAS_PUSH ,_param->_nb_inst_branch_decod); 783 DELETE1_SC_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_decod); 784 DELETE1_SC_SIGNAL( in_DECOD_RAS_ADDRESS_POP ,_param->_nb_inst_branch_decod); 785 //DELETE1_SC_SIGNAL( in_DECOD_RAS_INDEX ,_param->_nb_inst_branch_decod); 786 DELETE1_SC_SIGNAL(out_DECOD_RAS_MISS_PREDICTION ,_param->_nb_inst_branch_decod); 787 DELETE1_SC_SIGNAL(out_DECOD_UPT_VAL ,_param->_nb_inst_branch_decod); 788 DELETE1_SC_SIGNAL( in_DECOD_UPT_ACK ,_param->_nb_inst_branch_decod); 789 DELETE1_SC_SIGNAL(out_DECOD_UPT_CONTEXT_ID ,_param->_nb_inst_branch_decod); 790 DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod); 791 DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod); 792 DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_CONDITION ,_param->_nb_inst_branch_decod); 793 DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod); 794 DELETE1_SC_SIGNAL(out_DECOD_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_decod); 795 //DELETE1_SC_SIGNAL(out_DECOD_UPT_RAS_INDEX ,_param->_nb_inst_branch_decod); 796 DELETE1_SC_SIGNAL(out_DECOD_UPT_MISS_IFETCH ,_param->_nb_inst_branch_decod); 797 DELETE1_SC_SIGNAL(out_DECOD_UPT_MISS_DECOD ,_param->_nb_inst_branch_decod); 798 DELETE1_SC_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID ,_param->_nb_inst_branch_decod); 799 800 DELETE1_SC_SIGNAL(out_UPDATE_BTB_VAL ,_param->_nb_inst_branch_update); 801 DELETE1_SC_SIGNAL( in_UPDATE_BTB_ACK ,_param->_nb_inst_branch_update); 802 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_CONTEXT_ID ,_param->_nb_inst_branch_update); 803 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update); 804 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update); 805 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_CONDITION ,_param->_nb_inst_branch_update); 806 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_LAST_TAKE ,_param->_nb_inst_branch_update); 807 //DELETE1_SC_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION ,_param->_nb_inst_branch_update); 808 DELETE1_SC_SIGNAL(out_UPDATE_DIR_VAL ,_param->_nb_inst_branch_update); 809 DELETE1_SC_SIGNAL( in_UPDATE_DIR_ACK ,_param->_nb_inst_branch_update); 810 //DELETE1_SC_SIGNAL(out_UPDATE_DIR_ADDRESS ,_param->_nb_inst_branch_update); 811 //DELETE1_SC_SIGNAL(out_UPDATE_DIR_HISTORY ,_param->_nb_inst_branch_update); 812 //DELETE1_SC_SIGNAL(out_UPDATE_DIR_DIRECTION ,_param->_nb_inst_branch_update); 813 DELETE1_SC_SIGNAL(out_UPDATE_RAS_VAL ,_param->_nb_inst_branch_update); 814 DELETE1_SC_SIGNAL( in_UPDATE_RAS_ACK ,_param->_nb_inst_branch_update); 815 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_CONTEXT_ID ,_param->_nb_inst_branch_update); 816 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_PUSH ,_param->_nb_inst_branch_update); 817 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS ,_param->_nb_inst_branch_update); 818 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_INDEX ,_param->_nb_inst_branch_update); 819 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION ,_param->_nb_inst_branch_update); 820 //DELETE1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH ,_param->_nb_inst_branch_update); 821 DELETE1_SC_SIGNAL( in_UPDATE_UPT_VAL ,_param->_nb_inst_branch_update); 822 DELETE1_SC_SIGNAL(out_UPDATE_UPT_ACK ,_param->_nb_inst_branch_update); 823 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_CONTEXT_ID ,_param->_nb_inst_branch_update); 824 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION ,_param->_nb_inst_branch_update); 825 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD ,_param->_nb_inst_branch_update); 826 DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_VAL ,_param->_nb_inst_branch_update); 827 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update); 828 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update); 829 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_CONDITION ,_param->_nb_inst_branch_update); 830 DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIR_VAL ,_param->_nb_inst_branch_update); 831 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIR_HISTORY ,_param->_nb_inst_branch_update); 832 DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_VAL ,_param->_nb_inst_branch_update); 833 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_PUSH ,_param->_nb_inst_branch_update); 834 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_update); 835 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_INDEX ,_param->_nb_inst_branch_update); 836 //DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update); 837 453 838 } 454 839 #endif 455 840 456 841 delete _Prediction_unit_Glue; 842 457 843 #ifdef STATISTICS 458 844 delete _parameters_statistics; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h
r81 r82 24 24 { 25 25 //-----[ fields ]------------------------------------------------------------ 26 public : uint32_t _nb_context ; 26 public : uint32_t _nb_context ;// == nb_ifetch_unit 27 public : uint32_t _nb_decod_unit ; 28 //public : uint32_t _nb_ooo_engine ; 27 29 public : uint32_t _size_address ; 28 public : uint32_t * _nb_instruction ; 29 public : uint32_t * _size_depth ; 30 public : uint32_t _nb_inst_predict ; 31 public : uint32_t _nb_inst_decod ; 32 public : uint32_t _nb_inst_update ; 30 public : uint32_t * _nb_instruction ;//[nb_context] 31 public : uint32_t * _size_depth ;//[nb_context] 32 public : uint32_t * _nb_inst_decod ;//[nb_decod_unit] 33 //public : uint32_t * _nb_inst_update ;//[nb_ooo_engine] 34 public : uint32_t _nb_inst_branch_predict ; 35 public : uint32_t _nb_inst_branch_decod ; 36 public : uint32_t _nb_inst_branch_update ; 33 37 //public : uint32_t _nb_inst_branch_complete ; 34 38 35 39 public : uint32_t _size_context_id ; 36 public : uint32_t * _size_inst_ifetch_ptr ; 40 public : uint32_t * _size_inst_ifetch_ptr ;//[nb_context] 41 public : uint32_t _max_size_depth ; 37 42 38 43 public : bool _have_port_context_id ; 39 public : bool * _have_port_depth ; 40 public : bool * _have_port_inst_ifetch_ptr; 44 public : bool _have_port_max_depth ; 45 public : bool * _have_port_depth ;//[nb_context] 46 public : bool * _have_port_inst_ifetch_ptr;//[nb_context] 41 47 42 48 //-----[ methods ]----------------------------------------------------------- 43 public : Parameters (uint32_t nb_context , 44 uint32_t size_address , 45 uint32_t * nb_instruction , 46 uint32_t * size_depth , 47 uint32_t nb_inst_predict, 48 uint32_t nb_inst_decod , 49 uint32_t nb_inst_update ); 49 public : Parameters (uint32_t nb_context , 50 uint32_t nb_decod_unit , 51 // uint32_t nb_ooo_engine , 52 uint32_t size_address , 53 uint32_t * nb_instruction , 54 uint32_t * size_depth , 55 uint32_t * nb_inst_decod , 56 // uint32_t * nb_inst_update , 57 uint32_t nb_inst_branch_predict, 58 uint32_t nb_inst_branch_decod , 59 uint32_t nb_inst_branch_update ); 50 60 // public : Parameters (Parameters & param) ; 51 61 public : ~Parameters () ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h
r81 r82 75 75 public : SC_OUT(Tprediction_ptr_t ) ** out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ; //[nb_context] 76 76 77 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_BTB_VAL ; //[nb_inst_ predict]78 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_ACK ; //[nb_inst_ predict]79 public : SC_OUT(Tcontext_t ) ** out_PREDICT_BTB_CONTEXT_ID ; //[nb_inst_ predict]80 public : SC_OUT(Taddress_t ) ** out_PREDICT_BTB_ADDRESS ; //[nb_inst_ predict]81 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_HIT ; //[nb_inst_ predict]82 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_SRC ; //[nb_inst_ predict]83 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_DEST ; //[nb_inst_ predict]84 public : SC_IN (Tbranch_condition_t) ** in_PREDICT_BTB_CONDITION ; //[nb_inst_ predict]85 //public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_LAST_TAKE ; //[nb_inst_ predict] DIR.LAST_TAKE86 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_IS_ACCURATE ; //[nb_inst_ predict]77 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_BTB_VAL ; //[nb_inst_branch_predict] 78 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_ACK ; //[nb_inst_branch_predict] 79 public : SC_OUT(Tcontext_t ) ** out_PREDICT_BTB_CONTEXT_ID ; //[nb_inst_branch_predict] 80 public : SC_OUT(Taddress_t ) ** out_PREDICT_BTB_ADDRESS ; //[nb_inst_branch_predict] 81 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_HIT ; //[nb_inst_branch_predict] 82 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_SRC ; //[nb_inst_branch_predict] 83 public : SC_IN (Taddress_t ) ** in_PREDICT_BTB_ADDRESS_DEST ; //[nb_inst_branch_predict] 84 public : SC_IN (Tbranch_condition_t) ** in_PREDICT_BTB_CONDITION ; //[nb_inst_branch_predict] 85 //public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_LAST_TAKE ; //[nb_inst_branch_predict] DIR.LAST_TAKE 86 public : SC_IN (Tcontrol_t ) ** in_PREDICT_BTB_IS_ACCURATE ; //[nb_inst_branch_predict] 87 87 88 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_VAL ; //[nb_inst_ predict]89 public : SC_IN (Tcontrol_t ) ** in_PREDICT_DIR_ACK ; //[nb_inst_ predict]90 public : SC_OUT(Taddress_t ) ** out_PREDICT_DIR_ADDRESS_SRC ; //[nb_inst_ predict]91 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_STATIC ; //[nb_inst_ predict]92 //public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_LAST_TAKE ; //[nb_inst_ predict] BTB.LAST_TAKE93 //public : SC_IN (Thistory_t ) ** in_PREDICT_DIR_HISTORY ; //[nb_inst_ predict] UPT.DIR_HISTORY94 public : SC_IN (Tcontrol_t ) ** in_PREDICT_DIR_DIRECTION ; //[nb_inst_ predict]95 96 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_RAS_VAL ; //[nb_inst_ predict]97 public : SC_IN (Tcontrol_t ) ** in_PREDICT_RAS_ACK ; //[nb_inst_ predict]98 public : SC_OUT(Tcontext_t ) ** out_PREDICT_RAS_CONTEXT_ID ; //[nb_inst_ predict]99 public : SC_IN (Tcontrol_t ) ** in_PREDICT_RAS_HIT ; //[nb_inst_ predict]100 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_RAS_PUSH ; //[nb_inst_ predict]101 public : SC_OUT(Taddress_t ) ** out_PREDICT_RAS_ADDRESS_PUSH ; //[nb_inst_ predict]102 public : SC_IN (Taddress_t ) ** in_PREDICT_RAS_ADDRESS_POP ; //[nb_inst_ predict]103 //public : SC_IN (Tptr_t ) ** in_PREDICT_RAS_INDEX ; //[nb_inst_ predict] UPT.RAS_INDEX88 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_VAL ; //[nb_inst_branch_predict] 89 public : SC_IN (Tcontrol_t ) ** in_PREDICT_DIR_ACK ; //[nb_inst_branch_predict] 90 public : SC_OUT(Taddress_t ) ** out_PREDICT_DIR_ADDRESS_SRC ; //[nb_inst_branch_predict] 91 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_STATIC ; //[nb_inst_branch_predict] 92 //public : SC_OUT(Tcontrol_t ) ** out_PREDICT_DIR_LAST_TAKE ; //[nb_inst_branch_predict] BTB.LAST_TAKE 93 //public : SC_IN (Thistory_t ) ** in_PREDICT_DIR_HISTORY ; //[nb_inst_branch_predict] UPT.DIR_HISTORY 94 public : SC_IN (Tcontrol_t ) ** in_PREDICT_DIR_DIRECTION ; //[nb_inst_branch_predict] 95 96 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_RAS_VAL ; //[nb_inst_branch_predict] 97 public : SC_IN (Tcontrol_t ) ** in_PREDICT_RAS_ACK ; //[nb_inst_branch_predict] 98 public : SC_OUT(Tcontext_t ) ** out_PREDICT_RAS_CONTEXT_ID ; //[nb_inst_branch_predict] 99 public : SC_IN (Tcontrol_t ) ** in_PREDICT_RAS_HIT ; //[nb_inst_branch_predict] 100 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_RAS_PUSH ; //[nb_inst_branch_predict] 101 public : SC_OUT(Taddress_t ) ** out_PREDICT_RAS_ADDRESS_PUSH ; //[nb_inst_branch_predict] 102 public : SC_IN (Taddress_t ) ** in_PREDICT_RAS_ADDRESS_POP ; //[nb_inst_branch_predict] 103 //public : SC_IN (Tptr_t ) ** in_PREDICT_RAS_INDEX ; //[nb_inst_branch_predict] UPT.RAS_INDEX 104 104 105 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_VAL ; //[nb_inst_ predict]106 public : SC_IN (Tcontrol_t ) ** in_PREDICT_UPT_ACK ; //[nb_inst_ predict]107 public : SC_OUT(Tcontext_t ) ** out_PREDICT_UPT_CONTEXT_ID ; //[nb_inst_ predict]108 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_BTB_ADDRESS_SRC ; //[nb_inst_ predict]* BTB.ADDRESS_SRC109 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_BTB_ADDRESS_DEST ; //[nb_inst_ predict]110 public : SC_OUT(Tbranch_condition_t) ** out_PREDICT_UPT_BTB_CONDITION ; //[nb_inst_ predict]* BTB.CONDITION111 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_BTB_LAST_TAKE ; //[nb_inst_ predict]112 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_BTB_IS_ACCURATE ; //[nb_inst_ predict]113 //public : SC_OUT(Thistory_t ) ** out_PREDICT_UPT_DIR_HISTORY ; //[nb_inst_ predict] DIR.HISTORY114 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_RAS_ADDRESS ; //[nb_inst_ predict]* RAS.ADDRESS_POP115 //public : SC_OUT(Tptr_t ) ** out_PREDICT_UPT_RAS_INDEX ; //[nb_inst_ predict] RAS.INDEX105 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_VAL ; //[nb_inst_branch_predict] 106 public : SC_IN (Tcontrol_t ) ** in_PREDICT_UPT_ACK ; //[nb_inst_branch_predict] 107 public : SC_OUT(Tcontext_t ) ** out_PREDICT_UPT_CONTEXT_ID ; //[nb_inst_branch_predict] 108 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_BTB_ADDRESS_SRC ; //[nb_inst_branch_predict]* BTB.ADDRESS_SRC 109 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_BTB_ADDRESS_DEST ; //[nb_inst_branch_predict] 110 public : SC_OUT(Tbranch_condition_t) ** out_PREDICT_UPT_BTB_CONDITION ; //[nb_inst_branch_predict]* BTB.CONDITION 111 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_BTB_LAST_TAKE ; //[nb_inst_branch_predict] 112 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_UPT_BTB_IS_ACCURATE ; //[nb_inst_branch_predict] 113 //public : SC_OUT(Thistory_t ) ** out_PREDICT_UPT_DIR_HISTORY ; //[nb_inst_branch_predict] DIR.HISTORY 114 public : SC_OUT(Taddress_t ) ** out_PREDICT_UPT_RAS_ADDRESS ; //[nb_inst_branch_predict]* RAS.ADDRESS_POP 115 //public : SC_OUT(Tptr_t ) ** out_PREDICT_UPT_RAS_INDEX ; //[nb_inst_branch_predict] RAS.INDEX 116 116 117 117 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 118 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_VAL ; //[nb_inst_decod] 119 public : SC_IN (Tcontrol_t ) ** in_DECOD_BTB_ACK ; //[nb_inst_decod] 120 public : SC_OUT(Tcontext_t ) ** out_DECOD_BTB_CONTEXT_ID ; //[nb_inst_decod] 121 public : SC_OUT(Taddress_t ) ** out_DECOD_BTB_ADDRESS_SRC ; //[nb_inst_decod] 122 public : SC_OUT(Taddress_t ) ** out_DECOD_BTB_ADDRESS_DEST ; //[nb_inst_decod] 123 public : SC_OUT(Tbranch_condition_t) ** out_DECOD_BTB_CONDITION ; //[nb_inst_decod] 124 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_LAST_TAKE ; //[nb_inst_decod] 125 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_MISS_PREDICTION ; //[nb_inst_decod] 118 public : SC_IN (Tcontrol_t ) *** in_DECOD_VAL ; //[nb_decod_unit][nb_inst_decod] 119 public : SC_OUT(Tcontrol_t ) *** out_DECOD_ACK ; //[nb_decod_unit][nb_inst_decod] 120 public : SC_IN (Tcontext_t ) *** in_DECOD_CONTEXT_ID ; //[nb_decod_unit][nb_inst_decod] 121 public : SC_IN (Tcontrol_t ) *** in_DECOD_MATCH_INST_IFETCH_PTR ; //[nb_decod_unit][nb_inst_decod] 122 public : SC_IN (Tbranch_state_t ) *** in_DECOD_BRANCH_STATE ; //[nb_decod_unit][nb_inst_decod] 123 public : SC_IN (Tprediction_ptr_t ) *** in_DECOD_BRANCH_UPDATE_PREDICTION_ID ; //[nb_decod_unit][nb_inst_decod] 124 public : SC_IN (Tbranch_condition_t) *** in_DECOD_BRANCH_CONDITION ; //[nb_decod_unit][nb_inst_decod] 125 public : SC_IN (Tcontrol_t ) *** in_DECOD_BRANCH_DIRECTION ; //[nb_decod_unit][nb_inst_decod] 126 public : SC_IN (Taddress_t ) *** in_DECOD_ADDRESS_SRC ; //[nb_decod_unit][nb_inst_decod] 127 public : SC_IN (Taddress_t ) *** in_DECOD_ADDRESS_DEST ; //[nb_decod_unit][nb_inst_decod] 128 129 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_VAL ; //[nb_inst_branch_decod] 130 public : SC_IN (Tcontrol_t ) ** in_DECOD_BTB_ACK ; //[nb_inst_branch_decod] 131 public : SC_OUT(Tcontext_t ) ** out_DECOD_BTB_CONTEXT_ID ; //[nb_inst_branch_decod] 132 public : SC_OUT(Taddress_t ) ** out_DECOD_BTB_ADDRESS_SRC ; //[nb_inst_branch_decod] 133 public : SC_OUT(Taddress_t ) ** out_DECOD_BTB_ADDRESS_DEST ; //[nb_inst_branch_decod] 134 public : SC_OUT(Tbranch_condition_t) ** out_DECOD_BTB_CONDITION ; //[nb_inst_branch_decod] 135 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_LAST_TAKE ; //[nb_inst_branch_decod] 136 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_MISS_PREDICTION ; //[nb_inst_branch_decod] 137 public : SC_OUT(Tcontrol_t ) ** out_DECOD_BTB_IS_ACCURATE ; //[nb_inst_branch_decod] 126 138 127 public : SC_OUT(Tcontrol_t) ** out_DECOD_RAS_VAL ; //[nb_inst_decod] 128 public : SC_IN (Tcontrol_t) ** in_DECOD_RAS_ACK ; //[nb_inst_decod] 129 public : SC_OUT(Tcontext_t) ** out_DECOD_RAS_CONTEXT_ID ; //[nb_inst_decod] 130 public : SC_IN (Tcontrol_t) ** in_DECOD_RAS_HIT ; //[nb_inst_decod] 131 public : SC_OUT(Tcontrol_t) ** out_DECOD_RAS_PUSH ; //[nb_inst_decod] 132 public : SC_OUT(Taddress_t) ** out_DECOD_RAS_ADDRESS_PUSH ; //[nb_inst_decod] 133 public : SC_IN (Taddress_t) ** in_DECOD_RAS_ADDRESS_POP ; //[nb_inst_decod] 134 public : SC_IN (Tptr_t ) ** in_DECOD_RAS_INDEX ; //[nb_inst_decod] 135 public : SC_OUT(Tcontrol_t) ** out_DECOD_RAS_MISS_PREDICTION ; //[nb_inst_decod] 136 137 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_VAL ; //[nb_inst_decod] 138 public : SC_IN (Tcontrol_t ) ** in_DECOD_UPT_ACK ; //[nb_inst_decod] 139 public : SC_OUT(Tcontext_t ) ** out_DECOD_UPT_CONTEXT_ID ; //[nb_inst_decod] 140 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_BTB_ADDRESS_SRC ; //[nb_inst_decod] 141 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_BTB_ADDRESS_DEST ; //[nb_inst_decod] 142 public : SC_OUT(Tbranch_condition_t) ** out_DECOD_UPT_BTB_CONDITION ; //[nb_inst_decod] 143 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_BTB_LAST_TAKE ; //[nb_inst_decod] 144 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_RAS_ADDRESS ; //[nb_inst_decod] 145 public : SC_OUT(Tptr_t ) ** out_DECOD_UPT_RAS_INDEX ; //[nb_inst_decod] 146 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_MISS_PREDICTION ; //[nb_inst_decod] 147 public : SC_OUT(Tprediction_ptr_t ) ** out_DECOD_UPT_UPDATE_PREDICTION_ID ; //[nb_inst_decod] 139 public : SC_OUT(Tcontrol_t ) ** out_DECOD_RAS_VAL ; //[nb_inst_branch_decod] 140 public : SC_IN (Tcontrol_t ) ** in_DECOD_RAS_ACK ; //[nb_inst_branch_decod] 141 public : SC_OUT(Tcontext_t ) ** out_DECOD_RAS_CONTEXT_ID ; //[nb_inst_branch_decod] 142 public : SC_IN (Tcontrol_t ) ** in_DECOD_RAS_HIT ; //[nb_inst_branch_decod] 143 public : SC_OUT(Tcontrol_t ) ** out_DECOD_RAS_PUSH ; //[nb_inst_branch_decod] 144 public : SC_OUT(Taddress_t ) ** out_DECOD_RAS_ADDRESS_PUSH ; //[nb_inst_branch_decod] 145 public : SC_IN (Taddress_t ) ** in_DECOD_RAS_ADDRESS_POP ; //[nb_inst_branch_decod] 146 //public : SC_IN (Tptr_t ) ** in_DECOD_RAS_INDEX ; //[nb_inst_branch_decod] UPT.RAS_INDEX 147 public : SC_OUT(Tcontrol_t ) ** out_DECOD_RAS_MISS_PREDICTION ; //[nb_inst_branch_decod] 148 149 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_VAL ; //[nb_inst_branch_decod] 150 public : SC_IN (Tcontrol_t ) ** in_DECOD_UPT_ACK ; //[nb_inst_branch_decod] 151 public : SC_OUT(Tcontext_t ) ** out_DECOD_UPT_CONTEXT_ID ; //[nb_inst_branch_decod] 152 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_BTB_ADDRESS_SRC ; //[nb_inst_branch_decod] 153 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_BTB_ADDRESS_DEST ; //[nb_inst_branch_decod] 154 public : SC_OUT(Tbranch_condition_t) ** out_DECOD_UPT_BTB_CONDITION ; //[nb_inst_branch_decod] 155 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_BTB_LAST_TAKE ; //[nb_inst_branch_decod] 156 public : SC_OUT(Taddress_t ) ** out_DECOD_UPT_RAS_ADDRESS ; //[nb_inst_branch_decod] 157 //public : SC_OUT(Tptr_t ) ** out_DECOD_UPT_RAS_INDEX ; //[nb_inst_branch_decod] RAS.INDEX 158 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_MISS_IFETCH ; //[nb_inst_branch_decod] 159 public : SC_OUT(Tcontrol_t ) ** out_DECOD_UPT_MISS_DECOD ; //[nb_inst_branch_decod] 160 public : SC_OUT(Tprediction_ptr_t ) ** out_DECOD_UPT_UPDATE_PREDICTION_ID ; //[nb_inst_branch_decod] 148 161 149 162 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 150 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_VAL ; //[nb_inst_update] 151 public : SC_IN (Tcontrol_t ) ** in_UPDATE_BTB_ACK ; //[nb_inst_update] 152 public : SC_OUT(Tcontext_t ) ** out_UPDATE_BTB_CONTEXT_ID ; //[nb_inst_update] 153 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_SRC ; //[nb_inst_update] 154 public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_DEST ; //[nb_inst_update] 155 public : SC_OUT(Tbranch_condition_t) ** out_UPDATE_BTB_CONDITION ; //[nb_inst_update] 156 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_LAST_TAKE ; //[nb_inst_update] 157 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_MISS_PREDICTION ; //[nb_inst_update] 158 159 public : SC_OUT(Tcontrol_t) ** out_UPDATE_DIR_VAL ; //[nb_inst_update] 160 public : SC_IN (Tcontrol_t) ** in_UPDATE_DIR_ACK ; //[nb_inst_update] 161 public : SC_OUT(Taddress_t) ** out_UPDATE_DIR_ADDRESS ; //[nb_inst_update] 162 public : SC_OUT(Thistory_t) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_update] 163 public : SC_OUT(Tcontrol_t) ** out_UPDATE_DIR_DIRECTION ; //[nb_inst_update] 164 165 public : SC_OUT(Tcontrol_t) ** out_UPDATE_RAS_VAL ; //[nb_inst_update] 166 public : SC_IN (Tcontrol_t) ** in_UPDATE_RAS_ACK ; //[nb_inst_update] 167 public : SC_OUT(Tcontext_t) ** out_UPDATE_RAS_CONTEXT_ID ; //[nb_inst_update] 168 public : SC_OUT(Tcontrol_t) ** out_UPDATE_RAS_PUSH ; //[nb_inst_update] 169 public : SC_OUT(Taddress_t) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_update] 170 public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_update] 171 public : SC_OUT(Tcontrol_t) ** out_UPDATE_RAS_MISS_PREDICTION ; //[nb_inst_update] 172 public : SC_OUT(Tcontrol_t) ** out_UPDATE_RAS_PREDICTION_IFETCH ; //[nb_inst_update] 173 174 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_VAL ; //[nb_inst_update] 175 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_UPT_ACK ; //[nb_inst_update] 176 public : SC_IN (Tcontext_t ) ** in_UPDATE_UPT_CONTEXT_ID ; //[nb_inst_update] 177 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_MISS_PREDICTION ; //[nb_inst_update] 178 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_DIRECTION_GOOD ; //[nb_inst_update] 179 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_BTB_VAL ; //[nb_inst_update] 180 public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_BTB_ADDRESS_SRC ; //[nb_inst_update] 181 public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_BTB_ADDRESS_DEST ; //[nb_inst_update] 182 public : SC_IN (Tbranch_condition_t) ** in_UPDATE_UPT_BTB_CONDITION ; //[nb_inst_update] 183 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_DIR_VAL ; //[nb_inst_update] 184 public : SC_IN (Thistory_t ) ** in_UPDATE_UPT_DIR_HISTORY ; //[nb_inst_update] 185 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_RAS_VAL ; //[nb_inst_update] 186 public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_RAS_ADDRESS ; //[nb_inst_update] 187 public : SC_IN (Tptr_t ) ** in_UPDATE_UPT_RAS_INDEX ; //[nb_inst_update] 188 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_RAS_PREDICTION_IFETCH ; //[nb_inst_update] 163 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_VAL ; //[nb_inst_branch_update] 164 public : SC_IN (Tcontrol_t ) ** in_UPDATE_BTB_ACK ; //[nb_inst_branch_update] 165 //public : SC_OUT(Tcontext_t ) ** out_UPDATE_BTB_CONTEXT_ID ; //[nb_inst_branch_update] UPT.CONTEXT_ID 166 //public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_SRC ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_SRC 167 //public : SC_OUT(Taddress_t ) ** out_UPDATE_BTB_ADDRESS_DEST ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_DEST 168 //public : SC_OUT(Tbranch_condition_t) ** out_UPDATE_BTB_CONDITION ; //[nb_inst_branch_update]*UPT.BTB_CONDITION 169 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_LAST_TAKE ; //[nb_inst_branch_update] UPT.DIRECTION_GOOD 170 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_BTB_MISS_PREDICTION ; //[nb_inst_branch_update] UPT.MISS_PREDICTION 171 172 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIR_VAL ; //[nb_inst_branch_update] 173 public : SC_IN (Tcontrol_t ) ** in_UPDATE_DIR_ACK ; //[nb_inst_branch_update] 174 //public : SC_OUT(Taddress_t ) ** out_UPDATE_DIR_ADDRESS ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_SRC 175 //public : SC_OUT(Thistory_t ) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_branch_update] UPT.DIR_HISTORY 176 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_DIR_DIRECTION ; //[nb_inst_branch_update] UPT.DIRECTION_GOOD 177 178 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_VAL ; //[nb_inst_branch_update] 179 public : SC_IN (Tcontrol_t ) ** in_UPDATE_RAS_ACK ; //[nb_inst_branch_update] 180 //public : SC_OUT(Tcontext_t ) ** out_UPDATE_RAS_CONTEXT_ID ; //[nb_inst_branch_update] UPT.CONTEXT_ID 181 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PUSH ; //[nb_inst_branch_update] UPT.RAS_PUSH 182 //public : SC_OUT(Taddress_t ) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_branch_update] UPT.RAS_ADDRESS 183 //public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_branch_update] UPT.RAS_INDEX 184 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_MISS_PREDICTION ; //[nb_inst_branch_update] UPT.MISS_PREDICTION 185 //public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PREDICTION_IFETCH ; //[nb_inst_branch_update] UPT.RAS_PREDICTION_IFETCH 186 187 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_VAL ; //[nb_inst_branch_update] 188 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_UPT_ACK ; //[nb_inst_branch_update] 189 //public : SC_IN (Tcontext_t ) ** in_UPDATE_UPT_CONTEXT_ID ; //[nb_inst_branch_update] BTB.CONTEXT_ID, RAS.CONTEXT_ID 190 //public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_MISS_PREDICTION ; //[nb_inst_branch_update] BTB.MISS_PREDICTION, RAS.MISS_PREDICTION 191 //public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_DIRECTION_GOOD ; //[nb_inst_branch_update] BTB.LAST_TAKE, DIR.DIRECTION 192 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_BTB_VAL ; //[nb_inst_branch_update] 193 //public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_BTB_ADDRESS_SRC ; //[nb_inst_branch_update] DIR.ADDRESS, BTB.ADDRESS_SRC 194 //public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_BTB_ADDRESS_DEST ; //[nb_inst_branch_update] BTB.ADDRESS_DEST 195 //public : SC_IN (Tbranch_condition_t) ** in_UPDATE_UPT_BTB_CONDITION ; //[nb_inst_branch_update]*BTB.CONDITION 196 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_DIR_VAL ; //[nb_inst_branch_update] 197 //public : SC_IN (Thistory_t ) ** in_UPDATE_UPT_DIR_HISTORY ; //[nb_inst_branch_update] DIR.HISTORY 198 public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_RAS_VAL ; //[nb_inst_branch_update] 199 //public : SC_IN (Taddress_t ) ** in_UPDATE_UPT_RAS_ADDRESS ; //[nb_inst_branch_update] RAS.ADDRESS 200 //public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_RAS_PUSH ; //[nb_inst_branch_update] RAS.PUSH 201 //public : SC_IN (Tptr_t ) ** in_UPDATE_UPT_RAS_INDEX ; //[nb_inst_branch_update] RAS.INDEX 202 //public : SC_IN (Tcontrol_t ) ** in_UPDATE_UPT_RAS_PREDICTION_IFETCH ; //[nb_inst_branch_update] RAS.PREDICTION_IFETCH 189 203 190 204 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 191 205 public : SC_IN (Tdepth_t ) ** in_DEPTH_UPT_NB_BRANCH ; //[nb_context] 192 206 public : SC_IN (Tdepth_t ) ** in_DEPTH_UPT_TAIL ; //[nb_context] 207 public : SC_OUT(Tdepth_t ) ** out_DEPTH_NB_BRANCH ; //[nb_context] 208 public : SC_OUT(Tdepth_t ) ** out_DEPTH_TAIL ; //[nb_context] 193 209 194 210 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 196 212 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 197 213 private : uint32_t reg_PREDICT_PRIORITY; 214 private : uint32_t reg_DECOD_PRIORITY; 198 215 199 216 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 233 250 //public : void genMoore (void); 234 251 public : void genMealy_predict (void); 235 //public : void genMealy_decod (void);236 //public : void genMealy_update (void);252 public : void genMealy_decod (void); 253 public : void genMealy_update (void); 237 254 #endif 238 255 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters.cpp
r81 r82 7 7 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h" 9 #include "Common/include/Max.h" 9 10 10 11 namespace morpheo { … … 19 20 #undef FUNCTION 20 21 #define FUNCTION "Prediction_unit_Glue::Parameters" 21 Parameters::Parameters (uint32_t nb_context , 22 uint32_t size_address , 23 uint32_t * nb_instruction , 24 uint32_t * size_depth , 25 uint32_t nb_inst_predict, 26 uint32_t nb_inst_decod , 27 uint32_t nb_inst_update ) 22 Parameters::Parameters (uint32_t nb_context , 23 uint32_t nb_decod_unit , 24 // uint32_t nb_ooo_engine , 25 uint32_t size_address , 26 uint32_t * nb_instruction , 27 uint32_t * size_depth , 28 uint32_t * nb_inst_decod , 29 // uint32_t * nb_inst_update , 30 uint32_t nb_inst_branch_predict, 31 uint32_t nb_inst_branch_decod , 32 uint32_t nb_inst_branch_update ) 28 33 { 29 34 log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"Begin"); 30 35 31 _nb_context = nb_context ; 32 _size_address = size_address ; 33 _nb_instruction = nb_instruction ; 34 _size_depth = size_depth ; 35 _nb_inst_predict = nb_inst_predict ; 36 _nb_inst_decod = nb_inst_decod ; 37 _nb_inst_update = nb_inst_update ; 38 36 _nb_context = nb_context ; 37 _size_address = size_address ; 38 _nb_instruction = nb_instruction ; 39 _size_depth = size_depth ; 40 _nb_decod_unit = nb_decod_unit ; 41 _nb_inst_decod = nb_inst_decod ; 42 // _nb_ooo_engine = nb_ooo_engine ; 43 // _nb_inst_update = nb_inst_update ; 44 _nb_inst_branch_predict = nb_inst_branch_predict; 45 _nb_inst_branch_decod = nb_inst_branch_decod ; 46 _nb_inst_branch_update = nb_inst_branch_update ; 47 39 48 _size_context_id = log2(_nb_context); 40 49 _size_inst_ifetch_ptr = new uint32_t [_nb_context]; 50 _max_size_depth = max<uint32_t>(_size_depth,_nb_context); 41 51 42 52 _have_port_context_id = (_size_context_id>0); 53 _have_port_max_depth = (_max_size_depth>0); 43 54 _have_port_depth = new bool [_nb_context]; 44 55 _have_port_inst_ifetch_ptr = new bool [_nb_context]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_msg_error.cpp
r81 r82 27 27 Parameters_test test ("Prediction_unit_Glue"); 28 28 29 if (_nb_inst_ predict > _nb_context)29 if (_nb_inst_branch_predict > _nb_context) 30 30 test.error("nb_inst_predict must be <= nb_context\n"); 31 31 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_print.cpp
r81 r82 27 27 28 28 xml.balise_open("prediction_unit_glue"); 29 xml.singleton_begin("nb_context "); xml.attribut("value",toString(_nb_context )); xml.singleton_end(); 30 xml.singleton_begin("size_address "); xml.attribut("value",toString(_size_address )); xml.singleton_end(); 31 xml.singleton_begin("nb_inst_predict"); xml.attribut("value",toString(_nb_inst_predict)); xml.singleton_end(); 32 xml.singleton_begin("nb_inst_decod "); xml.attribut("value",toString(_nb_inst_decod )); xml.singleton_end(); 33 xml.singleton_begin("nb_inst_update "); xml.attribut("value",toString(_nb_inst_update )); xml.singleton_end(); 29 xml.singleton_begin("nb_context "); xml.attribut("value",toString(_nb_context )); xml.singleton_end(); 30 xml.singleton_begin("nb_decod_unit "); xml.attribut("value",toString(_nb_decod_unit )); xml.singleton_end(); 31 // xml.singleton_begin("nb_ooo_engine "); xml.attribut("value",toString(_nb_ooo_engine )); xml.singleton_end(); 32 xml.singleton_begin("size_address "); xml.attribut("value",toString(_size_address )); xml.singleton_end(); 33 xml.singleton_begin("nb_inst_branch_predict"); xml.attribut("value",toString(_nb_inst_branch_predict)); xml.singleton_end(); 34 xml.singleton_begin("nb_inst_branch_decod "); xml.attribut("value",toString(_nb_inst_branch_decod )); xml.singleton_end(); 35 xml.singleton_begin("nb_inst_branch_update "); xml.attribut("value",toString(_nb_inst_branch_update )); xml.singleton_end(); 36 37 // xml.singleton_begin("nb_inst_decod "); xml.attribut("value",toString(_nb_inst_decod )); xml.singleton_end(); 38 // xml.singleton_begin("nb_inst_update "); xml.attribut("value",toString(_nb_inst_update )); xml.singleton_end(); 34 39 for (uint32_t i=0;i<_nb_context; i++) 35 40 { … … 38 43 xml. attribut("id" ,toString(i)); 39 44 xml. balise_open_end(); 40 xml. singleton_begin("nb_instruction "); xml.attribut("value",toString(_nb_instruction[i])); xml.singleton_end();41 xml. singleton_begin("size_depth "); xml.attribut("value",toString(_size_depth[i])); xml.singleton_end();45 xml. singleton_begin("nb_instruction "); xml.attribut("value",toString(_nb_instruction [i])); xml.singleton_end(); 46 xml. singleton_begin("size_depth "); xml.attribut("value",toString(_size_depth [i])); xml.singleton_end(); 42 47 xml. balise_close(); 43 48 } 49 for (uint32_t i=0;i<_nb_decod_unit; i++) 50 { 51 xml. balise_open_begin("component"); 52 xml. attribut("type","decod_unit"); 53 xml. attribut("id" ,toString(i)); 54 xml. balise_open_end(); 55 xml. singleton_begin("nb_inst_decod "); xml.attribut("value",toString(_nb_inst_decod [i])); xml.singleton_end(); 56 xml. balise_close(); 57 } 58 // for (uint32_t i=0;i<_nb_ooo_engine; i++) 59 // { 60 // xml. balise_open_begin("component"); 61 // xml. attribut("type","ooo_engine"); 62 // xml. attribut("id" ,toString(i)); 63 // xml. balise_open_end(); 64 // xml. singleton_begin("nb_inst_update "); xml.attribut("value",toString(_nb_inst_update [i])); xml.singleton_end(); 65 // xml. balise_close(); 66 // } 67 44 68 xml.balise_close(); 45 69 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue.cpp
r81 r82 92 92 << (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 93 93 } 94 for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)94 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 95 95 { 96 96 sensitive << (*( in_PREDICT_BTB_ACK [i])) … … 110 110 << (*( in_PREDICT_UPT_ACK [i])); 111 111 } 112 for (uint32_t i=0; i<_param->_nb_context; i++) 113 { 114 sensitive << (*(in_DEPTH_UPT_NB_BRANCH [i])); 115 if (_param->_have_port_depth[i]) 116 sensitive << (*(in_DEPTH_UPT_TAIL [i])); 117 } 112 118 113 119 # ifdef SYSTEMCASS_SPECIFIC … … 115 121 for (uint32_t x=0; x<_param->_nb_context; x++) 116 122 { 123 if (_param->_have_port_depth[x]) 124 { 125 (*(out_DEPTH_TAIL [x])) (*( in_DEPTH_UPT_TAIL [x])); 126 } 127 (*(out_DEPTH_NB_BRANCH [x])) (*( in_DEPTH_UPT_NB_BRANCH [x])); 128 117 129 for (uint32_t i=0; i<_param->_nb_context; i++) 118 130 { … … 121 133 (*(out_PREDICT_ACK [x])) (*( in_PREDICT_PC_CURRENT [i])); 122 134 (*(out_PREDICT_ACK [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 123 } 124 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 135 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 136 { 137 (*(out_PREDICT_ACK [x])) (*( in_DEPTH_UPT_TAIL [i])); 138 } 139 (*(out_PREDICT_ACK [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 140 } 141 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 125 142 { 126 143 (*(out_PREDICT_ACK [x])) (*( in_PREDICT_BTB_ACK [i])); … … 147 164 (*(out_PREDICT_PC_NEXT [x])) (*( in_PREDICT_PC_CURRENT [i])); 148 165 (*(out_PREDICT_PC_NEXT [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 149 } 150 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 166 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 167 { 168 (*(out_PREDICT_PC_NEXT [x])) (*( in_DEPTH_UPT_TAIL [i])); 169 } 170 (*(out_PREDICT_PC_NEXT [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 171 } 172 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 151 173 { 152 174 (*(out_PREDICT_PC_NEXT [x])) (*( in_PREDICT_BTB_ACK [i])); … … 173 195 (*(out_PREDICT_PC_NEXT_IS_DS_TAKE [x])) (*( in_PREDICT_PC_CURRENT [i])); 174 196 (*(out_PREDICT_PC_NEXT_IS_DS_TAKE [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 175 } 176 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 197 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 198 { 199 (*(out_PREDICT_PC_NEXT_IS_DS_TAKE [x])) (*( in_DEPTH_UPT_TAIL [i])); 200 } 201 (*(out_PREDICT_PC_NEXT_IS_DS_TAKE [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 202 } 203 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 177 204 { 178 205 (*(out_PREDICT_PC_NEXT_IS_DS_TAKE [x])) (*( in_PREDICT_BTB_ACK [i])); … … 201 228 (*(out_PREDICT_INST_IFETCH_PTR [x])) (*( in_PREDICT_PC_CURRENT [i])); 202 229 (*(out_PREDICT_INST_IFETCH_PTR [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 203 } 204 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 230 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 231 { 232 (*(out_PREDICT_INST_IFETCH_PTR [x])) (*( in_DEPTH_UPT_TAIL [i])); 233 } 234 (*(out_PREDICT_INST_IFETCH_PTR [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 235 } 236 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 205 237 { 206 238 (*(out_PREDICT_INST_IFETCH_PTR [x])) (*( in_PREDICT_BTB_ACK [i])); … … 228 260 (*(out_PREDICT_BRANCH_STATE [x]))(*( in_PREDICT_PC_CURRENT [i])); 229 261 (*(out_PREDICT_BRANCH_STATE [x]))(*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 230 } 231 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 262 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 263 { 264 (*(out_PREDICT_BRANCH_STATE [x]))(*( in_DEPTH_UPT_TAIL [i])); 265 } 266 (*(out_PREDICT_BRANCH_STATE [x]))(*( in_DEPTH_UPT_NB_BRANCH [i])); 267 } 268 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 232 269 { 233 270 (*(out_PREDICT_BRANCH_STATE [x])) (*( in_PREDICT_BTB_ACK [i])); … … 256 293 (*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_PC_CURRENT [i])); 257 294 (*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 258 } 259 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 295 if (_param->_have_port_depth [i]) 296 { 297 (*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_DEPTH_UPT_TAIL [i])); 298 } 299 (*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 300 } 301 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 260 302 { 261 303 (*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_BTB_ACK [i])); … … 285 327 (*(out_PREDICT_INSTRUCTION_ENABLE [x][y])) (*( in_PREDICT_PC_CURRENT [i])); 286 328 (*(out_PREDICT_INSTRUCTION_ENABLE [x][y])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 287 } 288 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 329 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 330 { 331 (*(out_PREDICT_INSTRUCTION_ENABLE [x][y])) (*( in_DEPTH_UPT_TAIL [i])); 332 } 333 (*(out_PREDICT_INSTRUCTION_ENABLE [x][y])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 334 } 335 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 289 336 { 290 337 (*(out_PREDICT_INSTRUCTION_ENABLE [x][y])) (*( in_PREDICT_BTB_ACK [i])); … … 307 354 } 308 355 309 for (uint32_t x=0; x<_param->_nb_inst_ predict; x++)356 for (uint32_t x=0; x<_param->_nb_inst_branch_predict; x++) 310 357 { 311 358 for (uint32_t i=0; i<_param->_nb_context; i++) … … 315 362 (*(out_PREDICT_BTB_VAL [x])) (*( in_PREDICT_PC_CURRENT [i])); 316 363 (*(out_PREDICT_BTB_VAL [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 317 } 318 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 364 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 365 { 366 (*(out_PREDICT_BTB_VAL [x])) (*( in_DEPTH_UPT_TAIL [i])); 367 } 368 (*(out_PREDICT_BTB_VAL [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 369 } 370 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 319 371 { 320 372 (*(out_PREDICT_BTB_VAL [x])) (*( in_PREDICT_BTB_ACK [i])); … … 343 395 (*(out_PREDICT_BTB_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT [i])); 344 396 (*(out_PREDICT_BTB_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 345 } 346 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 397 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 398 { 399 (*(out_PREDICT_BTB_CONTEXT_ID [x])) (*( in_DEPTH_UPT_TAIL [i])); 400 } 401 (*(out_PREDICT_BTB_CONTEXT_ID [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 402 } 403 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 347 404 { 348 405 (*(out_PREDICT_BTB_CONTEXT_ID [x])) (*( in_PREDICT_BTB_ACK [i])); … … 370 427 (*(out_PREDICT_BTB_ADDRESS [x])) (*( in_PREDICT_PC_CURRENT [i])); 371 428 (*(out_PREDICT_BTB_ADDRESS [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 372 } 373 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 429 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 430 { 431 (*(out_PREDICT_BTB_ADDRESS [x])) (*( in_DEPTH_UPT_TAIL [i])); 432 } 433 (*(out_PREDICT_BTB_ADDRESS [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 434 } 435 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 374 436 { 375 437 (*(out_PREDICT_BTB_ADDRESS [x])) (*( in_PREDICT_BTB_ACK [i])); … … 396 458 (*(out_PREDICT_DIR_VAL [x])) (*( in_PREDICT_PC_CURRENT [i])); 397 459 (*(out_PREDICT_DIR_VAL [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 398 } 399 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 460 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 461 { 462 (*(out_PREDICT_DIR_VAL [x])) (*( in_DEPTH_UPT_TAIL [i])); 463 } 464 (*(out_PREDICT_DIR_VAL [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 465 } 466 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 400 467 { 401 468 (*(out_PREDICT_DIR_VAL [x])) (*( in_PREDICT_BTB_ACK [i])); … … 422 489 (*(out_PREDICT_DIR_ADDRESS_SRC [x])) (*( in_PREDICT_PC_CURRENT [i])); 423 490 (*(out_PREDICT_DIR_ADDRESS_SRC [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 424 } 425 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 491 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 492 { 493 (*(out_PREDICT_DIR_ADDRESS_SRC [x])) (*( in_DEPTH_UPT_TAIL [i])); 494 } 495 (*(out_PREDICT_DIR_ADDRESS_SRC [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 496 } 497 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 426 498 { 427 499 (*(out_PREDICT_DIR_ADDRESS_SRC [x])) (*( in_PREDICT_BTB_ACK [i])); … … 448 520 (*(out_PREDICT_DIR_STATIC [x])) (*( in_PREDICT_PC_CURRENT [i])); 449 521 (*(out_PREDICT_DIR_STATIC [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 450 } 451 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 522 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 523 { 524 (*(out_PREDICT_DIR_STATIC [x])) (*( in_DEPTH_UPT_TAIL [i])); 525 } 526 (*(out_PREDICT_DIR_STATIC [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 527 } 528 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 452 529 { 453 530 (*(out_PREDICT_DIR_STATIC [x])) (*( in_PREDICT_BTB_ACK [i])); … … 474 551 // (*(out_PREDICT_DIR_LAST_TAKE [x])) (*( in_PREDICT_PC_CURRENT [i])); 475 552 // (*(out_PREDICT_DIR_LAST_TAKE [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 553 // if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 554 // { 555 // (*(out_PREDICT_DIR_LAST_TAKE [x])) (*( in_DEPTH_UPT_TAIL [i])); 556 // } 557 // (*(out_PREDICT_DIR_LAST_TAKE [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 476 558 // } 477 // for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)559 // for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 478 560 // { 479 561 // (*(out_PREDICT_DIR_LAST_TAKE [x])) (*( in_PREDICT_BTB_ACK [i])); … … 500 582 (*(out_PREDICT_RAS_VAL [x])) (*( in_PREDICT_PC_CURRENT [i])); 501 583 (*(out_PREDICT_RAS_VAL [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 502 } 503 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 584 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 585 { 586 (*(out_PREDICT_RAS_VAL [x])) (*( in_DEPTH_UPT_TAIL [i])); 587 } 588 (*(out_PREDICT_RAS_VAL [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 589 } 590 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 504 591 { 505 592 (*(out_PREDICT_RAS_VAL [x])) (*( in_PREDICT_BTB_ACK [i])); … … 528 615 (*(out_PREDICT_RAS_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT [i])); 529 616 (*(out_PREDICT_RAS_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 530 } 531 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 617 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 618 { 619 (*(out_PREDICT_RAS_CONTEXT_ID [x])) (*( in_DEPTH_UPT_TAIL [i])); 620 } 621 (*(out_PREDICT_RAS_CONTEXT_ID [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 622 } 623 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 532 624 { 533 625 (*(out_PREDICT_RAS_CONTEXT_ID [x])) (*( in_PREDICT_BTB_ACK [i])); … … 555 647 (*(out_PREDICT_RAS_PUSH [x])) (*( in_PREDICT_PC_CURRENT [i])); 556 648 (*(out_PREDICT_RAS_PUSH [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 557 } 558 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 649 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 650 { 651 (*(out_PREDICT_RAS_PUSH [x])) (*( in_DEPTH_UPT_TAIL [i])); 652 } 653 (*(out_PREDICT_RAS_PUSH [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 654 } 655 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 559 656 { 560 657 (*(out_PREDICT_RAS_PUSH [x])) (*( in_PREDICT_BTB_ACK [i])); … … 581 678 (*(out_PREDICT_RAS_ADDRESS_PUSH [x])) (*( in_PREDICT_PC_CURRENT [i])); 582 679 (*(out_PREDICT_RAS_ADDRESS_PUSH [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 583 } 584 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 680 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 681 { 682 (*(out_PREDICT_RAS_ADDRESS_PUSH [x])) (*( in_DEPTH_UPT_TAIL [i])); 683 } 684 (*(out_PREDICT_RAS_ADDRESS_PUSH [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 685 } 686 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 585 687 { 586 688 (*(out_PREDICT_RAS_ADDRESS_PUSH [x])) (*( in_PREDICT_BTB_ACK [i])); … … 607 709 (*(out_PREDICT_UPT_VAL [x])) (*( in_PREDICT_PC_CURRENT [i])); 608 710 (*(out_PREDICT_UPT_VAL [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 609 } 610 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 711 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 712 { 713 (*(out_PREDICT_UPT_VAL [x])) (*( in_DEPTH_UPT_TAIL [i])); 714 } 715 (*(out_PREDICT_UPT_VAL [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 716 } 717 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 611 718 { 612 719 (*(out_PREDICT_UPT_VAL [x])) (*( in_PREDICT_BTB_ACK [i])); … … 635 742 (*(out_PREDICT_UPT_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT [i])); 636 743 (*(out_PREDICT_UPT_CONTEXT_ID [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 637 } 638 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 744 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 745 { 746 (*(out_PREDICT_UPT_CONTEXT_ID [x])) (*( in_DEPTH_UPT_TAIL [i])); 747 } 748 (*(out_PREDICT_UPT_CONTEXT_ID [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 749 } 750 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 639 751 { 640 752 (*(out_PREDICT_UPT_CONTEXT_ID [x])) (*( in_PREDICT_BTB_ACK [i])); … … 662 774 (*(out_PREDICT_UPT_BTB_ADDRESS_SRC [x])) (*( in_PREDICT_PC_CURRENT [i])); 663 775 (*(out_PREDICT_UPT_BTB_ADDRESS_SRC [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 664 } 665 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 776 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 777 { 778 (*(out_PREDICT_UPT_BTB_ADDRESS_SRC [x])) (*( in_DEPTH_UPT_TAIL [i])); 779 } 780 (*(out_PREDICT_UPT_BTB_ADDRESS_SRC [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 781 } 782 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 666 783 { 667 784 (*(out_PREDICT_UPT_BTB_ADDRESS_SRC [x])) (*( in_PREDICT_BTB_ACK [i])); … … 688 805 (*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_PC_CURRENT [i])); 689 806 (*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 690 } 691 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 807 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 808 { 809 (*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_DEPTH_UPT_TAIL [i])); 810 } 811 (*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 812 } 813 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 692 814 { 693 815 (*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_BTB_ACK [i])); … … 714 836 (*(out_PREDICT_UPT_BTB_CONDITION [x])) (*( in_PREDICT_PC_CURRENT [i])); 715 837 (*(out_PREDICT_UPT_BTB_CONDITION [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 716 } 717 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 838 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 839 { 840 (*(out_PREDICT_UPT_BTB_CONDITION [x])) (*( in_DEPTH_UPT_TAIL [i])); 841 } 842 (*(out_PREDICT_UPT_BTB_CONDITION [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 843 } 844 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 718 845 { 719 846 (*(out_PREDICT_UPT_BTB_CONDITION [x])) (*( in_PREDICT_BTB_ACK [i])); … … 740 867 (*(out_PREDICT_UPT_BTB_LAST_TAKE [x])) (*( in_PREDICT_PC_CURRENT [i])); 741 868 (*(out_PREDICT_UPT_BTB_LAST_TAKE [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 742 } 743 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 869 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 870 { 871 (*(out_PREDICT_UPT_BTB_LAST_TAKE [x])) (*( in_DEPTH_UPT_TAIL [i])); 872 } 873 (*(out_PREDICT_UPT_BTB_LAST_TAKE [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 874 } 875 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 744 876 { 745 877 (*(out_PREDICT_UPT_BTB_LAST_TAKE [x])) (*( in_PREDICT_BTB_ACK [i])); … … 766 898 (*(out_PREDICT_UPT_BTB_IS_ACCURATE [x])) (*( in_PREDICT_PC_CURRENT [i])); 767 899 (*(out_PREDICT_UPT_BTB_IS_ACCURATE [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 768 } 769 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 900 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 901 { 902 (*(out_PREDICT_UPT_BTB_IS_ACCURATE [x])) (*( in_DEPTH_UPT_TAIL [i])); 903 } 904 (*(out_PREDICT_UPT_BTB_IS_ACCURATE [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 905 } 906 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 770 907 { 771 908 (*(out_PREDICT_UPT_BTB_IS_ACCURATE [x])) (*( in_PREDICT_BTB_ACK [i])); … … 792 929 // (*(out_PREDICT_UPT_DIR_HISTORY [x])) (*( in_PREDICT_PC_CURRENT [i])); 793 930 // (*(out_PREDICT_UPT_DIR_HISTORY [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 931 // if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 932 // { 933 // (*(out_PREDICT_UPT_DIR_HISTORY [x])) (*( in_DEPTH_UPT_TAIL [i])); 934 // } 935 // (*(out_PREDICT_UPT_DIR_HISTORY [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 794 936 // } 795 // for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)937 // for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 796 938 // { 797 939 // (*(out_PREDICT_UPT_DIR_HISTORY [x])) (*( in_PREDICT_BTB_ACK [i])); … … 818 960 (*(out_PREDICT_UPT_RAS_ADDRESS [x])) (*( in_PREDICT_PC_CURRENT [i])); 819 961 (*(out_PREDICT_UPT_RAS_ADDRESS [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 820 } 821 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 962 if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 963 { 964 (*(out_PREDICT_UPT_RAS_ADDRESS [x])) (*( in_DEPTH_UPT_TAIL [i])); 965 } 966 (*(out_PREDICT_UPT_RAS_ADDRESS [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 967 } 968 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 822 969 { 823 970 (*(out_PREDICT_UPT_RAS_ADDRESS [x])) (*( in_PREDICT_BTB_ACK [i])); … … 844 991 // (*(out_PREDICT_UPT_RAS_INDEX [x])) (*( in_PREDICT_PC_CURRENT [i])); 845 992 // (*(out_PREDICT_UPT_RAS_INDEX [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE [i])); 993 // if (_param->_have_port_depth[x] and _param->_have_port_depth[i]) 994 // { 995 // (*(out_PREDICT_UPT_RAS_INDEX [x])) (*( in_DEPTH_UPT_TAIL [i])); 996 // } 997 // (*(out_PREDICT_UPT_RAS_INDEX [x])) (*( in_DEPTH_UPT_NB_BRANCH [i])); 846 998 // } 847 // for (uint32_t i=0; i<_param->_nb_inst_ predict; i++)999 // for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 848 1000 // { 849 1001 // (*(out_PREDICT_UPT_RAS_INDEX [x])) (*( in_PREDICT_BTB_ACK [i])); … … 865 1017 } 866 1018 # endif 1019 1020 log_printf(INFO,Prediction_unit_Glue,FUNCTION,"Method - genMealy_decod"); 1021 1022 SC_METHOD (genMealy_decod); 1023 dont_initialize (); 1024 sensitive << (*(in_CLOCK)).neg(); // use internal register 1025 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1026 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1027 { 1028 sensitive << (*(in_DECOD_VAL [i][j])) 1029 << (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])) 1030 << (*(in_DECOD_BRANCH_STATE [i][j])) 1031 << (*(in_DECOD_BRANCH_CONDITION [i][j])) 1032 << (*(in_DECOD_BRANCH_DIRECTION [i][j])) 1033 << (*(in_DECOD_ADDRESS_SRC [i][j])) 1034 << (*(in_DECOD_ADDRESS_DEST [i][j])); 1035 1036 if (_param->_have_port_context_id) 1037 sensitive << (*(in_DECOD_CONTEXT_ID [i][j])); 1038 if (_param->_have_port_max_depth) 1039 sensitive << (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1040 } 1041 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1042 { 1043 sensitive << (*(in_DECOD_BTB_ACK [i] )) 1044 << (*(in_DECOD_RAS_ACK [i] )) 1045 << (*(in_DECOD_RAS_HIT [i] )) 1046 << (*(in_DECOD_RAS_ADDRESS_POP [i] )) 1047 // << (*(in_DECOD_RAS_INDEX [i] )) 1048 << (*(in_DECOD_UPT_ACK [i] )) ; 1049 } 1050 1051 # ifdef SYSTEMCASS_SPECIFIC 1052 // List dependency information 867 1053 1054 for (uint32_t x=0; x<_param->_nb_decod_unit; x++) 1055 for (uint32_t y=0; y<_param->_nb_inst_decod[x]; y++) 1056 { 1057 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1058 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1059 { 1060 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_VAL [i][j])); 1061 if (_param->_have_port_context_id) 1062 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_CONTEXT_ID [i][j])); 1063 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1064 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_BRANCH_STATE [i][j])); 1065 if (_param->_have_port_max_depth) 1066 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1067 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1068 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1069 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1070 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1071 } 1072 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1073 { 1074 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_BTB_ACK [i] )); 1075 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_RAS_ACK [i] )); 1076 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_RAS_HIT [i] )); 1077 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1078 // (*(out_DECOD_ACK [x][y])) (*(in_DECOD_RAS_INDEX [i] )); 1079 (*(out_DECOD_ACK [x][y])) (*(in_DECOD_UPT_ACK [i] )); 1080 } 1081 } 1082 1083 for (uint32_t x=0; x<_param->_nb_inst_branch_decod; x++) 1084 { 1085 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1086 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1087 { 1088 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_VAL [i][j])); 1089 if (_param->_have_port_context_id) 1090 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1091 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1092 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1093 if (_param->_have_port_max_depth) 1094 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1095 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1096 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1097 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1098 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1099 } 1100 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1101 { 1102 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_BTB_ACK [i] )); 1103 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_RAS_ACK [i] )); 1104 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_RAS_HIT [i] )); 1105 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1106 // (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_RAS_INDEX [i] )); 1107 (*(out_DECOD_BTB_VAL [x])) (*(in_DECOD_UPT_ACK [i] )); 1108 } 1109 1110 if (_param->_have_port_context_id) 1111 { 1112 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1113 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1114 { 1115 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_VAL [i][j])); 1116 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1117 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1118 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1119 if (_param->_have_port_max_depth) 1120 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1121 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1122 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1123 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1124 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1125 } 1126 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1127 { 1128 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_BTB_ACK [i] )); 1129 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_RAS_ACK [i] )); 1130 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_RAS_HIT [i] )); 1131 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1132 // (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_RAS_INDEX [i] )); 1133 (*(out_DECOD_BTB_CONTEXT_ID [x])) (*(in_DECOD_UPT_ACK [i] )); 1134 } 1135 } 1136 1137 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1138 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1139 { 1140 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_VAL [i][j])); 1141 if (_param->_have_port_context_id) 1142 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1143 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1144 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1145 if (_param->_have_port_max_depth) 1146 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1147 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1148 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1149 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1150 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1151 } 1152 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1153 { 1154 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BTB_ACK [i] )); 1155 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_ACK [i] )); 1156 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_HIT [i] )); 1157 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1158 // (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_INDEX [i] )); 1159 (*(out_DECOD_BTB_ADDRESS_SRC [x])) (*(in_DECOD_UPT_ACK [i] )); 1160 } 1161 1162 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1163 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1164 { 1165 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_VAL [i][j])); 1166 if (_param->_have_port_context_id) 1167 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1168 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1169 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1170 if (_param->_have_port_max_depth) 1171 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1172 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1173 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1174 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1175 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1176 } 1177 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1178 { 1179 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BTB_ACK [i] )); 1180 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_ACK [i] )); 1181 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_HIT [i] )); 1182 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1183 // (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_INDEX [i] )); 1184 (*(out_DECOD_BTB_ADDRESS_DEST [x])) (*(in_DECOD_UPT_ACK [i] )); 1185 } 1186 1187 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1188 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1189 { 1190 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_VAL [i][j])); 1191 if (_param->_have_port_context_id) 1192 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1193 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1194 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1195 if (_param->_have_port_max_depth) 1196 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1197 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1198 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1199 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1200 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1201 } 1202 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1203 { 1204 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_BTB_ACK [i] )); 1205 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_RAS_ACK [i] )); 1206 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_RAS_HIT [i] )); 1207 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1208 // (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_RAS_INDEX [i] )); 1209 (*(out_DECOD_BTB_CONDITION [x])) (*(in_DECOD_UPT_ACK [i] )); 1210 } 1211 1212 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1213 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1214 { 1215 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_VAL [i][j])); 1216 if (_param->_have_port_context_id) 1217 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1218 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1219 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1220 if (_param->_have_port_max_depth) 1221 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1222 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1223 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1224 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1225 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1226 } 1227 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1228 { 1229 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_BTB_ACK [i] )); 1230 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_ACK [i] )); 1231 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_HIT [i] )); 1232 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1233 // (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_INDEX [i] )); 1234 (*(out_DECOD_BTB_LAST_TAKE [x])) (*(in_DECOD_UPT_ACK [i] )); 1235 } 1236 1237 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1238 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1239 { 1240 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_VAL [i][j])); 1241 if (_param->_have_port_context_id) 1242 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1243 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1244 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1245 if (_param->_have_port_max_depth) 1246 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1247 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1248 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1249 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1250 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1251 } 1252 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1253 { 1254 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_BTB_ACK [i] )); 1255 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_RAS_ACK [i] )); 1256 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_RAS_HIT [i] )); 1257 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1258 // (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_RAS_INDEX [i] )); 1259 (*(out_DECOD_BTB_MISS_PREDICTION [x])) (*(in_DECOD_UPT_ACK [i] )); 1260 } 1261 1262 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1263 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1264 { 1265 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_VAL [i][j])); 1266 if (_param->_have_port_context_id) 1267 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1268 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1269 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1270 if (_param->_have_port_max_depth) 1271 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1272 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1273 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1274 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1275 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1276 } 1277 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1278 { 1279 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_BTB_ACK [i] )); 1280 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_RAS_ACK [i] )); 1281 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_RAS_HIT [i] )); 1282 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1283 // (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_RAS_INDEX [i] )); 1284 (*(out_DECOD_BTB_IS_ACCURATE [x])) (*(in_DECOD_UPT_ACK [i] )); 1285 } 1286 1287 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1288 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1289 { 1290 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_VAL [i][j])); 1291 if (_param->_have_port_context_id) 1292 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1293 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1294 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1295 if (_param->_have_port_max_depth) 1296 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1297 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1298 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1299 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1300 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1301 } 1302 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1303 { 1304 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_BTB_ACK [i] )); 1305 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_RAS_ACK [i] )); 1306 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_RAS_HIT [i] )); 1307 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1308 // (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_RAS_INDEX [i] )); 1309 (*(out_DECOD_RAS_VAL [x])) (*(in_DECOD_UPT_ACK [i] )); 1310 } 1311 1312 if (_param->_have_port_context_id) 1313 { 1314 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1315 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1316 { 1317 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_VAL [i][j])); 1318 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1319 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1320 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1321 if (_param->_have_port_max_depth) 1322 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1323 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1324 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1325 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1326 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1327 } 1328 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1329 { 1330 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_BTB_ACK [i] )); 1331 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_RAS_ACK [i] )); 1332 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_RAS_HIT [i] )); 1333 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1334 // (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_RAS_INDEX [i] )); 1335 (*(out_DECOD_RAS_CONTEXT_ID [x])) (*(in_DECOD_UPT_ACK [i] )); 1336 } 1337 } 1338 1339 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1340 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1341 { 1342 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_VAL [i][j])); 1343 if (_param->_have_port_context_id) 1344 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1345 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1346 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1347 if (_param->_have_port_max_depth) 1348 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1349 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1350 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1351 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1352 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1353 } 1354 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1355 { 1356 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_BTB_ACK [i] )); 1357 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_RAS_ACK [i] )); 1358 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_RAS_HIT [i] )); 1359 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1360 // (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_RAS_INDEX [i] )); 1361 (*(out_DECOD_RAS_PUSH [x])) (*(in_DECOD_UPT_ACK [i] )); 1362 } 1363 1364 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1365 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1366 { 1367 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_VAL [i][j])); 1368 if (_param->_have_port_context_id) 1369 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1370 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1371 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1372 if (_param->_have_port_max_depth) 1373 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1374 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1375 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1376 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1377 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1378 } 1379 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1380 { 1381 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_BTB_ACK [i] )); 1382 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_RAS_ACK [i] )); 1383 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_RAS_HIT [i] )); 1384 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1385 // (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_RAS_INDEX [i] )); 1386 (*(out_DECOD_RAS_ADDRESS_PUSH [x])) (*(in_DECOD_UPT_ACK [i] )); 1387 } 1388 1389 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1390 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1391 { 1392 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_VAL [i][j])); 1393 if (_param->_have_port_context_id) 1394 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1395 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1396 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1397 if (_param->_have_port_max_depth) 1398 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1399 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1400 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1401 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1402 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1403 } 1404 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1405 { 1406 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_BTB_ACK [i] )); 1407 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_RAS_ACK [i] )); 1408 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_RAS_HIT [i] )); 1409 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1410 // (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_RAS_INDEX [i] )); 1411 (*(out_DECOD_RAS_MISS_PREDICTION [x])) (*(in_DECOD_UPT_ACK [i] )); 1412 } 1413 1414 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1415 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1416 { 1417 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_VAL [i][j])); 1418 if (_param->_have_port_context_id) 1419 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1420 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1421 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1422 if (_param->_have_port_max_depth) 1423 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1424 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1425 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1426 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1427 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1428 } 1429 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1430 { 1431 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_BTB_ACK [i] )); 1432 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_RAS_ACK [i] )); 1433 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_RAS_HIT [i] )); 1434 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1435 // (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_RAS_INDEX [i] )); 1436 (*(out_DECOD_UPT_VAL [x])) (*(in_DECOD_UPT_ACK [i] )); 1437 } 1438 1439 if (_param->_have_port_context_id) 1440 { 1441 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1442 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1443 { 1444 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_VAL [i][j])); 1445 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1446 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1447 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1448 if (_param->_have_port_max_depth) 1449 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1450 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1451 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1452 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1453 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1454 } 1455 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1456 { 1457 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_BTB_ACK [i] )); 1458 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_RAS_ACK [i] )); 1459 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_RAS_HIT [i] )); 1460 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1461 // (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_RAS_INDEX [i] )); 1462 (*(out_DECOD_UPT_CONTEXT_ID [x])) (*(in_DECOD_UPT_ACK [i] )); 1463 } 1464 } 1465 1466 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1467 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1468 { 1469 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_VAL [i][j])); 1470 if (_param->_have_port_context_id) 1471 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1472 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1473 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1474 if (_param->_have_port_max_depth) 1475 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1476 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1477 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1478 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1479 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1480 } 1481 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1482 { 1483 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_BTB_ACK [i] )); 1484 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_ACK [i] )); 1485 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_HIT [i] )); 1486 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1487 // (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_RAS_INDEX [i] )); 1488 (*(out_DECOD_UPT_BTB_ADDRESS_SRC [x])) (*(in_DECOD_UPT_ACK [i] )); 1489 } 1490 1491 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1492 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1493 { 1494 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_VAL [i][j])); 1495 if (_param->_have_port_context_id) 1496 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1497 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1498 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1499 if (_param->_have_port_max_depth) 1500 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1501 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1502 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1503 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1504 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1505 } 1506 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1507 { 1508 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_BTB_ACK [i] )); 1509 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_ACK [i] )); 1510 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_HIT [i] )); 1511 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1512 // (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_RAS_INDEX [i] )); 1513 (*(out_DECOD_UPT_BTB_ADDRESS_DEST [x])) (*(in_DECOD_UPT_ACK [i] )); 1514 } 1515 1516 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1517 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1518 { 1519 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_VAL [i][j])); 1520 if (_param->_have_port_context_id) 1521 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1522 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1523 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1524 if (_param->_have_port_max_depth) 1525 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1526 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1527 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1528 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1529 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1530 } 1531 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1532 { 1533 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_BTB_ACK [i] )); 1534 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_RAS_ACK [i] )); 1535 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_RAS_HIT [i] )); 1536 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1537 // (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_RAS_INDEX [i] )); 1538 (*(out_DECOD_UPT_BTB_CONDITION [x])) (*(in_DECOD_UPT_ACK [i] )); 1539 } 1540 1541 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1542 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1543 { 1544 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_VAL [i][j])); 1545 if (_param->_have_port_context_id) 1546 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1547 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1548 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1549 if (_param->_have_port_max_depth) 1550 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1551 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1552 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1553 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1554 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1555 } 1556 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1557 { 1558 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_BTB_ACK [i] )); 1559 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_ACK [i] )); 1560 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_HIT [i] )); 1561 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1562 // (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_RAS_INDEX [i] )); 1563 (*(out_DECOD_UPT_BTB_LAST_TAKE [x])) (*(in_DECOD_UPT_ACK [i] )); 1564 } 1565 1566 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1567 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1568 { 1569 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_VAL [i][j])); 1570 if (_param->_have_port_context_id) 1571 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1572 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1573 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1574 if (_param->_have_port_max_depth) 1575 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1576 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1577 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1578 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1579 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1580 } 1581 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1582 { 1583 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_BTB_ACK [i] )); 1584 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_RAS_ACK [i] )); 1585 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_RAS_HIT [i] )); 1586 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1587 // (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_RAS_INDEX [i] )); 1588 (*(out_DECOD_UPT_RAS_ADDRESS [x])) (*(in_DECOD_UPT_ACK [i] )); 1589 } 1590 1591 // for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1592 // for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1593 // { 1594 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_VAL [i][j])); 1595 // if (_param->_have_port_context_id) 1596 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1597 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1598 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1599 // if (_param->_have_port_max_depth) 1600 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1601 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1602 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1603 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1604 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1605 // } 1606 // for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1607 // { 1608 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_BTB_ACK [i] )); 1609 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_RAS_ACK [i] )); 1610 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_RAS_HIT [i] )); 1611 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1612 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_RAS_INDEX [i] )); 1613 // (*(out_DECOD_UPT_RAS_INDEX [x])) (*(in_DECOD_UPT_ACK [i] )); 1614 // } 1615 1616 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1617 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1618 { 1619 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_VAL [i][j])); 1620 if (_param->_have_port_context_id) 1621 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1622 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1623 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1624 if (_param->_have_port_max_depth) 1625 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1626 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1627 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1628 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1629 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1630 } 1631 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1632 { 1633 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_BTB_ACK [i] )); 1634 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_RAS_ACK [i] )); 1635 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_RAS_HIT [i] )); 1636 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1637 // (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_RAS_INDEX [i] )); 1638 (*(out_DECOD_UPT_MISS_IFETCH [x])) (*(in_DECOD_UPT_ACK [i] )); 1639 } 1640 1641 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1642 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1643 { 1644 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_VAL [i][j])); 1645 if (_param->_have_port_context_id) 1646 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1647 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1648 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1649 if (_param->_have_port_max_depth) 1650 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1651 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1652 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1653 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1654 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1655 } 1656 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1657 { 1658 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_BTB_ACK [i] )); 1659 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_RAS_ACK [i] )); 1660 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_RAS_HIT [i] )); 1661 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1662 // (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_RAS_INDEX [i] )); 1663 (*(out_DECOD_UPT_MISS_DECOD [x])) (*(in_DECOD_UPT_ACK [i] )); 1664 } 1665 1666 if (_param->_have_port_max_depth) 1667 { 1668 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 1669 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 1670 { 1671 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_VAL [i][j])); 1672 if (_param->_have_port_context_id) 1673 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_CONTEXT_ID [i][j])); 1674 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR [i][j])); 1675 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_STATE [i][j])); 1676 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 1677 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_CONDITION [i][j])); 1678 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_DIRECTION [i][j])); 1679 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_ADDRESS_SRC [i][j])); 1680 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_ADDRESS_DEST [i][j])); 1681 } 1682 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 1683 { 1684 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BTB_ACK [i] )); 1685 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_ACK [i] )); 1686 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_HIT [i] )); 1687 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_ADDRESS_POP [i] )); 1688 // (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_INDEX [i] )); 1689 (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_UPT_ACK [i] )); 1690 } 1691 } 1692 } 1693 # endif 1694 1695 log_printf(INFO,Prediction_unit_Glue,FUNCTION,"Method - genMealy_update"); 1696 1697 SC_METHOD (genMealy_update); 1698 dont_initialize (); 1699 // sensitive << (*(in_CLOCK)).neg(); // don't use internal register 1700 for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 1701 sensitive << (*(in_UPDATE_BTB_ACK [i])) 1702 << (*(in_UPDATE_DIR_ACK [i])) 1703 << (*(in_UPDATE_RAS_ACK [i])) 1704 << (*(in_UPDATE_UPT_VAL [i])) 1705 << (*(in_UPDATE_UPT_BTB_VAL [i])) 1706 << (*(in_UPDATE_UPT_DIR_VAL [i])) 1707 << (*(in_UPDATE_UPT_RAS_VAL [i])); 1708 1709 # ifdef SYSTEMCASS_SPECIFIC 1710 // List dependency information 1711 for (uint32_t x=0; x<_param->_nb_inst_branch_update; x++) 1712 // for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 1713 { 1714 uint32_t i=x; 1715 1716 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_BTB_ACK [i])); 1717 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_DIR_ACK [i])); 1718 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_RAS_ACK [i])); 1719 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_UPT_VAL [i])); 1720 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_UPT_BTB_VAL [i])); 1721 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_UPT_DIR_VAL [i])); 1722 (*(out_UPDATE_BTB_VAL [x])) (*(in_UPDATE_UPT_RAS_VAL [i])); 1723 1724 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_BTB_ACK [i])); 1725 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_DIR_ACK [i])); 1726 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_RAS_ACK [i])); 1727 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_UPT_VAL [i])); 1728 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_UPT_BTB_VAL [i])); 1729 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_UPT_DIR_VAL [i])); 1730 (*(out_UPDATE_DIR_VAL [x])) (*(in_UPDATE_UPT_RAS_VAL [i])); 1731 1732 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_BTB_ACK [i])); 1733 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_DIR_ACK [i])); 1734 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_RAS_ACK [i])); 1735 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_UPT_VAL [i])); 1736 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_UPT_BTB_VAL [i])); 1737 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_UPT_DIR_VAL [i])); 1738 (*(out_UPDATE_RAS_VAL [x])) (*(in_UPDATE_UPT_RAS_VAL [i])); 1739 1740 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_BTB_ACK [i])); 1741 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_DIR_ACK [i])); 1742 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_RAS_ACK [i])); 1743 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_UPT_VAL [i])); 1744 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_UPT_BTB_VAL [i])); 1745 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_UPT_DIR_VAL [i])); 1746 (*(out_UPDATE_UPT_ACK [x])) (*(in_UPDATE_UPT_RAS_VAL [i])); 1747 } 1748 # endif 868 1749 #endif 869 1750 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_allocation.cpp
r81 r82 16 16 namespace prediction_unit { 17 17 namespace prediction_unit_glue { 18 19 20 18 21 19 #undef FUNCTION … … 79 77 80 78 { 81 ALLOC1_INTERFACE("predict_btb",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_ predict);79 ALLOC1_INTERFACE("predict_btb",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict); 82 80 83 81 ALLOC1_VALACK_OUT(out_PREDICT_BTB_VAL ,VAL); … … 94 92 95 93 { 96 ALLOC1_INTERFACE("predict_dir",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_ predict);94 ALLOC1_INTERFACE("predict_dir",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict); 97 95 98 96 ALLOC1_VALACK_OUT(out_PREDICT_DIR_VAL ,VAL); … … 106 104 107 105 { 108 ALLOC1_INTERFACE("predict_ras",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_ predict);106 ALLOC1_INTERFACE("predict_ras",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict); 109 107 110 108 ALLOC1_VALACK_OUT(out_PREDICT_RAS_VAL ,VAL); … … 119 117 120 118 { 121 ALLOC1_INTERFACE("predict_upt",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_ predict);119 ALLOC1_INTERFACE("predict_upt",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict); 122 120 123 121 ALLOC1_VALACK_OUT(out_PREDICT_UPT_VAL ,VAL); … … 135 133 } 136 134 135 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 136 { 137 { 138 ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_interface_it1]); 139 140 _ALLOC2_VALACK_IN ( in_DECOD_VAL ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 141 _ALLOC2_VALACK_OUT(out_DECOD_ACK ,ACK,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 142 _ALLOC2_SIGNAL_IN ( in_DECOD_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 143 _ALLOC2_SIGNAL_IN ( in_DECOD_MATCH_INST_IFETCH_PTR ,"match_inst_ifetch_ptr" ,Tcontrol_t ,1 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 144 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_STATE ,"branch_state" ,Tbranch_state_t ,_param->_size_branch_state ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 145 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t ,_param->_max_size_depth ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 146 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_CONDITION ,"branch_condition" ,Tbranch_condition_t,_param->_size_branch_condition,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 147 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_DIRECTION ,"branch_direction" ,Tcontrol_t ,1 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 148 _ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_SRC ,"address_src" ,Taddress_t ,_param->_size_address ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 149 _ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST ,"address_dest" ,Taddress_t ,_param->_size_address ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 150 } 151 152 { 153 ALLOC1_INTERFACE("decod_btb",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod); 154 155 ALLOC1_VALACK_OUT(out_DECOD_BTB_VAL ,VAL); 156 ALLOC1_VALACK_IN ( in_DECOD_BTB_ACK ,ACK); 157 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 158 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_ADDRESS_SRC ,"address_src" ,Taddress_t ,_param->_size_address); 159 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_ADDRESS_DEST ,"address_dest" ,Taddress_t ,_param->_size_address); 160 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_CONDITION ,"condition" ,Tbranch_condition_t,_param->_size_branch_condition); 161 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_LAST_TAKE ,"last_take" ,Tcontrol_t ,1); 162 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_MISS_PREDICTION,"miss_prediction",Tcontrol_t ,1); 163 ALLOC1_SIGNAL_OUT(out_DECOD_BTB_IS_ACCURATE ,"is_accurate" ,Tcontrol_t ,1); 164 } 165 166 { 167 ALLOC1_INTERFACE("decod_ras",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod); 168 169 ALLOC1_VALACK_OUT(out_DECOD_RAS_VAL ,VAL); 170 ALLOC1_VALACK_IN ( in_DECOD_RAS_ACK ,ACK); 171 ALLOC1_SIGNAL_OUT(out_DECOD_RAS_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 172 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_HIT ,"hit" ,Tcontrol_t,1); 173 ALLOC1_SIGNAL_OUT(out_DECOD_RAS_PUSH ,"push" ,Tcontrol_t,1); 174 ALLOC1_SIGNAL_OUT(out_DECOD_RAS_ADDRESS_PUSH ,"address_push" ,Taddress_t,_param->_size_address); 175 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS_POP ,"address_pop" ,Taddress_t,_param->_size_address); 176 // ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX ,"index" ,Tptr_t ,_param->_size_ras_index); 177 ALLOC1_SIGNAL_OUT(out_DECOD_RAS_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 178 } 179 180 { 181 ALLOC1_INTERFACE("decod_upt",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod); 182 183 ALLOC1_VALACK_OUT(out_DECOD_UPT_VAL ,VAL); 184 ALLOC1_VALACK_IN ( in_DECOD_UPT_ACK ,ACK); 185 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 186 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_address); 187 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_address); 188 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_CONDITION ,"btb_condition" ,Tbranch_condition_t,_param->_size_branch_condition); 189 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_LAST_TAKE ,"btb_last_take" ,Tcontrol_t ,1); 190 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 191 // ALLOC1_SIGNAL_OUT(out_DECOD_UPT_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_size_ras_index); 192 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_MISS_IFETCH ,"miss_ifetch" ,Tcontrol_t ,1); 193 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_MISS_DECOD ,"miss_decod" ,Tcontrol_t ,1); 194 ALLOC1_SIGNAL_OUT(out_DECOD_UPT_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_max_size_depth); 195 } 196 } 197 198 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 199 { 200 { 201 ALLOC1_INTERFACE("update_btb",OUT,SOUTH,"Interface with update unit",_param->_nb_inst_branch_update); 202 203 ALLOC1_VALACK_OUT(out_UPDATE_BTB_VAL ,VAL); 204 ALLOC1_VALACK_IN ( in_UPDATE_BTB_ACK ,ACK); 205 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 206 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_SRC ,"address_src" ,Taddress_t ,_param->_size_address); 207 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_DEST ,"address_dest" ,Taddress_t ,_param->_size_address); 208 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_CONDITION ,"condition" ,Tbranch_condition_t,_param->_size_branch_condition); 209 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_LAST_TAKE ,"last_take" ,Tcontrol_t ,1); 210 // ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 211 } 212 213 { 214 ALLOC1_INTERFACE("update_dir",OUT,NORTH,"Interface with update unit",_param->_nb_inst_branch_update); 215 216 ALLOC1_VALACK_OUT(out_UPDATE_DIR_VAL ,VAL); 217 ALLOC1_VALACK_IN ( in_UPDATE_DIR_ACK ,ACK); 218 // ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_ADDRESS ,"address" ,Taddress_t ,_param->_size_address); 219 // ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY ,"history" ,Thistory_t ,_param->_size_history); 220 // ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_DIRECTION ,"direction" ,Tcontrol_t ,1); 221 } 222 223 { 224 ALLOC1_INTERFACE("update_ras",OUT,NORTH,"Interface with update unit",_param->_nb_inst_branch_update); 225 226 ALLOC1_VALACK_OUT(out_UPDATE_RAS_VAL ,VAL); 227 ALLOC1_VALACK_IN ( in_UPDATE_RAS_ACK ,ACK); 228 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 229 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH ,"push" ,Tcontrol_t ,1); 230 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"address" ,Taddress_t ,_param->_size_address); 231 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX ,"index" ,Tptr_t ,_param->_size_ras_index); 232 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 233 // ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PREDICTION_IFETCH ,"prediction_ifetch" ,Tcontrol_t ,1); 234 } 235 236 { 237 ALLOC1_INTERFACE("update_upt",IN ,NORTH,"Interface with update unit",_param->_nb_inst_branch_update); 238 239 ALLOC1_VALACK_IN ( in_UPDATE_UPT_VAL ,VAL); 240 ALLOC1_VALACK_OUT(out_UPDATE_UPT_ACK ,ACK); 241 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id); 242 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 243 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIRECTION_GOOD ,"direction_good" ,Tcontrol_t ,1); 244 ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_VAL ,"btb_val" ,Tcontrol_t ,1); 245 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_ADDRESS_SRC ,"btb_address_src" ,Taddress_t ,_param->_size_address); 246 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_ADDRESS_DEST ,"btb_address_dest" ,Taddress_t ,_param->_size_address); 247 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_CONDITION ,"btb_condition" ,Tbranch_condition_t,_param->_size_branch_condition); 248 ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIR_VAL ,"dir_val" ,Tcontrol_t ,1); 249 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIR_HISTORY ,"dir_history" ,Thistory_t ,_param->_size_history); 250 ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_VAL ,"ras_val" ,Tcontrol_t ,1); 251 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_PUSH ,"ras_push" ,Tcontrol_t ,1); 252 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 253 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_size_ras_index); 254 // ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,"ras_prediction_ifetch",Tcontrol_t ,1); 255 } 256 } 257 137 258 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 138 259 { 139 260 ALLOC1_INTERFACE("depth",IN,NORTH,"Interface with depth",_param->_nb_context); 140 141 ALLOC1_SIGNAL_IN (in_DEPTH_UPT_NB_BRANCH,"upt_nb_branch",Tdepth_t,_param->_size_depth[alloc_signal_it1]); 142 ALLOC1_SIGNAL_IN (in_DEPTH_UPT_TAIL ,"upt_tail" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 143 } 261 262 ALLOC1_SIGNAL_IN ( in_DEPTH_UPT_NB_BRANCH,"upt_nb_branch",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1); 263 ALLOC1_SIGNAL_IN ( in_DEPTH_UPT_TAIL ,"upt_tail" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 264 ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH ,"nb_branch" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]+1); 265 ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL ,"tail" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 266 } 267 268 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 269 270 #ifndef NO_INIT 271 reg_PREDICT_PRIORITY = 0; 272 reg_DECOD_PRIORITY = 0; 273 #endif 144 274 145 275 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_deallocation.cpp
r81 r82 29 29 delete in_NRESET; 30 30 31 31 32 // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 33 DELETE1_SIGNAL( in_PREDICT_VAL ,_param->_nb_context ,1); … … 41 42 DELETE1_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context ,_param->_size_depth [alloc_signal_it1]); 42 43 DELETE2_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE ,_param->_nb_context ,_param->_nb_instruction[alloc_signal_it1],1); 43 DELETE1_SIGNAL(out_PREDICT_BTB_VAL ,_param->_nb_inst_predict,1); 44 DELETE1_SIGNAL( in_PREDICT_BTB_ACK ,_param->_nb_inst_predict,1); 45 DELETE1_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_predict,_param->_size_context_id); 46 DELETE1_SIGNAL(out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_predict,_param->_size_address); 47 DELETE1_SIGNAL( in_PREDICT_BTB_HIT ,_param->_nb_inst_predict,1); 48 DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_predict,_param->_size_address); 49 DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_predict,_param->_size_address); 50 DELETE1_SIGNAL( in_PREDICT_BTB_CONDITION ,_param->_nb_inst_predict,_param->_size_branch_condition); 51 // DELETE1_SIGNAL( in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_predict,1); 52 DELETE1_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_predict,1); 53 DELETE1_SIGNAL(out_PREDICT_DIR_VAL ,_param->_nb_inst_predict,1); 54 DELETE1_SIGNAL( in_PREDICT_DIR_ACK ,_param->_nb_inst_predict,1); 55 DELETE1_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_predict,_param->_size_address); 56 DELETE1_SIGNAL(out_PREDICT_DIR_STATIC ,_param->_nb_inst_predict,1); 57 // DELETE1_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_predict,1); 58 // DELETE1_SIGNAL( in_PREDICT_DIR_HISTORY ,_param->_nb_inst_predict,_param->_size_history); 59 DELETE1_SIGNAL( in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_predict,1); 60 DELETE1_SIGNAL(out_PREDICT_RAS_VAL ,_param->_nb_inst_predict,1); 61 DELETE1_SIGNAL( in_PREDICT_RAS_ACK ,_param->_nb_inst_predict,1); 62 DELETE1_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_predict,_param->_size_context_id); 63 DELETE1_SIGNAL( in_PREDICT_RAS_HIT ,_param->_nb_inst_predict,1); 64 DELETE1_SIGNAL(out_PREDICT_RAS_PUSH ,_param->_nb_inst_predict,1); 65 DELETE1_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_predict,_param->_size_address); 66 DELETE1_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_predict,_param->_size_address); 67 // DELETE1_SIGNAL( in_PREDICT_RAS_INDEX ,_param->_nb_inst_predict,_param->_size_ras_index); 68 DELETE1_SIGNAL(out_PREDICT_UPT_VAL ,_param->_nb_inst_predict,1); 69 DELETE1_SIGNAL( in_PREDICT_UPT_ACK ,_param->_nb_inst_predict,1); 70 DELETE1_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_predict,_param->_size_context_id); 71 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_predict,_param->_size_address); 72 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_predict,_param->_size_address); 73 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_predict,_param->_size_branch_condition); 74 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_predict,1); 75 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_predict,1); 76 // DELETE1_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_predict,_param->_size_history); 77 DELETE1_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_predict,_param->_size_address); 78 // DELETE1_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_predict,_param->_size_ras_index); 44 DELETE1_SIGNAL(out_PREDICT_BTB_VAL ,_param->_nb_inst_branch_predict,1); 45 DELETE1_SIGNAL( in_PREDICT_BTB_ACK ,_param->_nb_inst_branch_predict,1); 46 DELETE1_SIGNAL(out_PREDICT_BTB_CONTEXT_ID ,_param->_nb_inst_branch_predict,_param->_size_context_id); 47 DELETE1_SIGNAL(out_PREDICT_BTB_ADDRESS ,_param->_nb_inst_branch_predict,_param->_size_address); 48 DELETE1_SIGNAL( in_PREDICT_BTB_HIT ,_param->_nb_inst_branch_predict,1); 49 DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict,_param->_size_address); 50 DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict,_param->_size_address); 51 DELETE1_SIGNAL( in_PREDICT_BTB_CONDITION ,_param->_nb_inst_branch_predict,_param->_size_branch_condition); 52 // DELETE1_SIGNAL( in_PREDICT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict,1); 53 DELETE1_SIGNAL( in_PREDICT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict,1); 54 DELETE1_SIGNAL(out_PREDICT_DIR_VAL ,_param->_nb_inst_branch_predict,1); 55 DELETE1_SIGNAL( in_PREDICT_DIR_ACK ,_param->_nb_inst_branch_predict,1); 56 DELETE1_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC ,_param->_nb_inst_branch_predict,_param->_size_address); 57 DELETE1_SIGNAL(out_PREDICT_DIR_STATIC ,_param->_nb_inst_branch_predict,1); 58 // DELETE1_SIGNAL(out_PREDICT_DIR_LAST_TAKE ,_param->_nb_inst_branch_predict,1); 59 // DELETE1_SIGNAL( in_PREDICT_DIR_HISTORY ,_param->_nb_inst_branch_predict,_param->_size_history); 60 DELETE1_SIGNAL( in_PREDICT_DIR_DIRECTION ,_param->_nb_inst_branch_predict,1); 61 DELETE1_SIGNAL(out_PREDICT_RAS_VAL ,_param->_nb_inst_branch_predict,1); 62 DELETE1_SIGNAL( in_PREDICT_RAS_ACK ,_param->_nb_inst_branch_predict,1); 63 DELETE1_SIGNAL(out_PREDICT_RAS_CONTEXT_ID ,_param->_nb_inst_branch_predict,_param->_size_context_id); 64 DELETE1_SIGNAL( in_PREDICT_RAS_HIT ,_param->_nb_inst_branch_predict,1); 65 DELETE1_SIGNAL(out_PREDICT_RAS_PUSH ,_param->_nb_inst_branch_predict,1); 66 DELETE1_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_predict,_param->_size_address); 67 DELETE1_SIGNAL( in_PREDICT_RAS_ADDRESS_POP ,_param->_nb_inst_branch_predict,_param->_size_address); 68 // DELETE1_SIGNAL( in_PREDICT_RAS_INDEX ,_param->_nb_inst_branch_predict,_param->_size_ras_index); 69 DELETE1_SIGNAL(out_PREDICT_UPT_VAL ,_param->_nb_inst_branch_predict,1); 70 DELETE1_SIGNAL( in_PREDICT_UPT_ACK ,_param->_nb_inst_branch_predict,1); 71 DELETE1_SIGNAL(out_PREDICT_UPT_CONTEXT_ID ,_param->_nb_inst_branch_predict,_param->_size_context_id); 72 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_predict,_param->_size_address); 73 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_predict,_param->_size_address); 74 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_CONDITION ,_param->_nb_inst_branch_predict,_param->_size_branch_condition); 75 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_predict,1); 76 DELETE1_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE ,_param->_nb_inst_branch_predict,1); 77 // DELETE1_SIGNAL(out_PREDICT_UPT_DIR_HISTORY ,_param->_nb_inst_branch_predict,_param->_size_history); 78 DELETE1_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_predict,_param->_size_address); 79 // DELETE1_SIGNAL(out_PREDICT_UPT_RAS_INDEX ,_param->_nb_inst_branch_predict,_param->_size_ras_index); 80 81 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 82 DELETE2_SIGNAL( in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1); 83 DELETE2_SIGNAL(out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1); 84 DELETE2_SIGNAL( in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_context_id ); 85 DELETE2_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1 ); 86 DELETE2_SIGNAL( in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_state ); 87 DELETE2_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_max_size_depth ); 88 DELETE2_SIGNAL( in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_condition); 89 DELETE2_SIGNAL( in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1 ); 90 DELETE2_SIGNAL( in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address ); 91 DELETE2_SIGNAL( in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address ); 92 DELETE1_SIGNAL(out_DECOD_BTB_VAL ,_param->_nb_inst_branch_decod,1); 93 DELETE1_SIGNAL( in_DECOD_BTB_ACK ,_param->_nb_inst_branch_decod,1); 94 DELETE1_SIGNAL(out_DECOD_BTB_CONTEXT_ID ,_param->_nb_inst_branch_decod,_param->_size_context_id); 95 DELETE1_SIGNAL(out_DECOD_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod,_param->_size_address); 96 DELETE1_SIGNAL(out_DECOD_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod,_param->_size_address); 97 DELETE1_SIGNAL(out_DECOD_BTB_CONDITION ,_param->_nb_inst_branch_decod,_param->_size_branch_condition); 98 DELETE1_SIGNAL(out_DECOD_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod,1); 99 DELETE1_SIGNAL(out_DECOD_BTB_MISS_PREDICTION,_param->_nb_inst_branch_decod,1); 100 DELETE1_SIGNAL(out_DECOD_BTB_IS_ACCURATE ,_param->_nb_inst_branch_decod,1); 101 102 DELETE1_SIGNAL(out_DECOD_RAS_VAL ,_param->_nb_inst_branch_decod,1); 103 DELETE1_SIGNAL( in_DECOD_RAS_ACK ,_param->_nb_inst_branch_decod,1); 104 DELETE1_SIGNAL(out_DECOD_RAS_CONTEXT_ID ,_param->_nb_inst_branch_decod,_param->_size_context_id); 105 DELETE1_SIGNAL( in_DECOD_RAS_HIT ,_param->_nb_inst_branch_decod,1); 106 DELETE1_SIGNAL(out_DECOD_RAS_PUSH ,_param->_nb_inst_branch_decod,1); 107 DELETE1_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH ,_param->_nb_inst_branch_decod,_param->_size_address); 108 DELETE1_SIGNAL( in_DECOD_RAS_ADDRESS_POP ,_param->_nb_inst_branch_decod,_param->_size_address); 109 // DELETE1_SIGNAL( in_DECOD_RAS_INDEX ,_param->_nb_inst_branch_decod,_param->_size_ras_index); 110 DELETE1_SIGNAL(out_DECOD_RAS_MISS_PREDICTION,_param->_nb_inst_branch_decod,1); 111 112 DELETE1_SIGNAL(out_DECOD_UPT_VAL ,_param->_nb_inst_branch_decod,1); 113 DELETE1_SIGNAL( in_DECOD_UPT_ACK ,_param->_nb_inst_branch_decod,1); 114 DELETE1_SIGNAL(out_DECOD_UPT_CONTEXT_ID ,_param->_nb_inst_branch_decod,_param->_size_context_id); 115 DELETE1_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_decod,_param->_size_address); 116 DELETE1_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_decod,_param->_size_address); 117 DELETE1_SIGNAL(out_DECOD_UPT_BTB_CONDITION ,_param->_nb_inst_branch_decod,_param->_size_branch_condition); 118 DELETE1_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE ,_param->_nb_inst_branch_decod,1); 119 DELETE1_SIGNAL(out_DECOD_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_decod,_param->_size_address); 120 // DELETE1_SIGNAL(out_DECOD_UPT_RAS_INDEX ,_param->_nb_inst_branch_decod,_param->_size_ras_index); 121 DELETE1_SIGNAL(out_DECOD_UPT_MISS_IFETCH ,_param->_nb_inst_branch_decod,1); 122 DELETE1_SIGNAL(out_DECOD_UPT_MISS_DECOD ,_param->_nb_inst_branch_decod,1); 123 DELETE1_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID,_param->_nb_inst_branch_decod,_param->_max_size_depth); 124 125 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 126 DELETE1_SIGNAL(out_UPDATE_BTB_VAL ,_param->_nb_inst_branch_update,1); 127 DELETE1_SIGNAL( in_UPDATE_BTB_ACK ,_param->_nb_inst_branch_update,1); 128 // DELETE1_SIGNAL(out_UPDATE_BTB_CONTEXT_ID ,_param->_nb_inst_branch_update,_param->_size_context_id); 129 // DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update,_param->_size_address); 130 // DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update,_param->_size_address); 131 // DELETE1_SIGNAL(out_UPDATE_BTB_CONDITION ,_param->_nb_inst_branch_update,_param->_size_branch_condition); 132 // DELETE1_SIGNAL(out_UPDATE_BTB_LAST_TAKE ,_param->_nb_inst_branch_update,1); 133 // DELETE1_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION ,_param->_nb_inst_branch_update,1); 134 135 DELETE1_SIGNAL(out_UPDATE_DIR_VAL ,_param->_nb_inst_branch_update,1); 136 DELETE1_SIGNAL( in_UPDATE_DIR_ACK ,_param->_nb_inst_branch_update,1); 137 // DELETE1_SIGNAL(out_UPDATE_DIR_ADDRESS ,_param->_nb_inst_branch_update,_param->_size_address); 138 // DELETE1_SIGNAL(out_UPDATE_DIR_HISTORY ,_param->_nb_inst_branch_update,_param->_size_history); 139 // DELETE1_SIGNAL(out_UPDATE_DIR_DIRECTION ,_param->_nb_inst_branch_update,1); 140 141 DELETE1_SIGNAL(out_UPDATE_RAS_VAL ,_param->_nb_inst_branch_update,1); 142 DELETE1_SIGNAL( in_UPDATE_RAS_ACK ,_param->_nb_inst_branch_update,1); 143 // DELETE1_SIGNAL(out_UPDATE_RAS_CONTEXT_ID ,_param->_nb_inst_branch_update,_param->_size_context_id); 144 // DELETE1_SIGNAL(out_UPDATE_RAS_PUSH ,_param->_nb_inst_branch_update,1); 145 // DELETE1_SIGNAL(out_UPDATE_RAS_ADDRESS ,_param->_nb_inst_branch_update,_param->_size_address); 146 // DELETE1_SIGNAL(out_UPDATE_RAS_INDEX ,_param->_nb_inst_branch_update,_param->_size_ras_index); 147 // DELETE1_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION ,_param->_nb_inst_branch_update,1); 148 // DELETE1_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH ,_param->_nb_inst_branch_update,1); 149 150 DELETE1_SIGNAL( in_UPDATE_UPT_VAL ,_param->_nb_inst_branch_update,1); 151 DELETE1_SIGNAL(out_UPDATE_UPT_ACK ,_param->_nb_inst_branch_update,1); 152 // DELETE1_SIGNAL( in_UPDATE_UPT_CONTEXT_ID ,_param->_nb_inst_branch_update,_param->_size_context_id); 153 // DELETE1_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION ,_param->_nb_inst_branch_update,1); 154 // DELETE1_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD ,_param->_nb_inst_branch_update,1); 155 DELETE1_SIGNAL( in_UPDATE_UPT_BTB_VAL ,_param->_nb_inst_branch_update,1); 156 // DELETE1_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC ,_param->_nb_inst_branch_update,_param->_size_address); 157 // DELETE1_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST ,_param->_nb_inst_branch_update,_param->_size_address); 158 // DELETE1_SIGNAL( in_UPDATE_UPT_BTB_CONDITION ,_param->_nb_inst_branch_update,_param->_size_branch_condition); 159 DELETE1_SIGNAL( in_UPDATE_UPT_DIR_VAL ,_param->_nb_inst_branch_update,1); 160 // DELETE1_SIGNAL( in_UPDATE_UPT_DIR_HISTORY ,_param->_nb_inst_branch_update,_param->_size_history); 161 DELETE1_SIGNAL( in_UPDATE_UPT_RAS_VAL ,_param->_nb_inst_branch_update,1); 162 // DELETE1_SIGNAL( in_UPDATE_UPT_RAS_PUSH ,_param->_nb_inst_branch_update,1); 163 // DELETE1_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS ,_param->_nb_inst_branch_update,_param->_size_address); 164 // DELETE1_SIGNAL( in_UPDATE_UPT_RAS_INDEX ,_param->_nb_inst_branch_update,_param->_size_ras_index); 165 // DELETE1_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update,1); 79 166 80 167 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 81 DELETE1_SIGNAL( in_DEPTH_UPT_NB_BRANCH,_param->_nb_context,_param->_size_depth[alloc_signal_it1] );168 DELETE1_SIGNAL( in_DEPTH_UPT_NB_BRANCH,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1); 82 169 DELETE1_SIGNAL( in_DEPTH_UPT_TAIL ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]); 170 DELETE1_SIGNAL(out_DEPTH_NB_BRANCH ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1); 171 DELETE1_SIGNAL(out_DEPTH_TAIL ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]); 83 172 } 84 173 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_predict.cpp
r81 r82 26 26 Tcontrol_t ack [_param->_nb_context]; 27 27 for (uint32_t i=0; i<_param->_nb_context; i++) 28 ack [i] = 0; 29 30 for (uint32_t i=0; i<_param->_nb_inst_predict; i++) 28 { 29 ack [i] = 0; 30 31 if (_param->_have_port_depth[i]) 32 { 33 PORT_WRITE(out_DEPTH_TAIL [i],PORT_READ(in_DEPTH_UPT_TAIL [i])); 34 } 35 PORT_WRITE(out_DEPTH_NB_BRANCH [i],PORT_READ(in_DEPTH_UPT_NB_BRANCH [i])); 36 } 37 38 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 31 39 { 32 40 log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"PREDICT [%d]",i); … … 136 144 { 137 145 branch_state = BRANCH_STATE_SPEC_NTAKE; 138 pc_next = address_src+ 8; // +4= delay slot146 pc_next = address_src+2; // +1 = delay slot 139 147 } 140 148 break; … … 191 199 PORT_WRITE(out_PREDICT_RAS_CONTEXT_ID [i], context); 192 200 PORT_WRITE(out_PREDICT_RAS_PUSH [i], push); 193 PORT_WRITE(out_PREDICT_RAS_ADDRESS_PUSH [i], address_src+ 8);201 PORT_WRITE(out_PREDICT_RAS_ADDRESS_PUSH [i], address_src+2); 194 202 195 203 is_accurate &= PORT_READ(in_PREDICT_RAS_HIT [i]); // if miss - prediction is not accurate … … 221 229 // (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i]))); 222 230 223 dir_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 224 (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i])) and 225 (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i]))); 226 227 ras_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 228 (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i])) and 229 (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i]))); 230 231 upt_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 232 (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i])) and 233 (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i]))); 231 dir_val = (use_dir and 232 PORT_READ(in_PREDICT_BTB_ACK [i]) and 233 (not use_ras or (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i]))) and 234 (not use_upt or (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i])))); 235 236 ras_val = (use_ras and 237 PORT_READ(in_PREDICT_BTB_ACK [i]) and 238 (not use_dir or (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i]))) and 239 (not use_upt or (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i])))); 240 241 upt_val = (use_upt and 242 PORT_READ(in_PREDICT_BTB_ACK [i]) and 243 (not use_dir or (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i]))) and 244 (not use_ras or (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i])))); 234 245 235 246 // pc_next - is previously computed … … 238 249 Taddress_t address_src_lsb = address_src%_param->_nb_instruction [context]; 239 250 251 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * address_src : 0x%x",address_src); 252 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * address_src_lsb : %d",address_src_lsb); 240 253 if (address_src_lsb == (_param->_nb_instruction [context]-1)) 241 254 { 242 255 // branch is in the last slot of the packet 256 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * branch is in the last slot of the packet"); 257 243 258 address_msb = _param->_nb_instruction [context]; // == (address_src_lsb+1) 244 259 pc_next_is_ds_take = 1; … … 250 265 pc_next_is_ds_take = 0; 251 266 } 267 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * address_msb : %d",address_msb); 252 268 253 269 inst_ifetch_ptr = address_src_lsb; 254 branch_update_prediction_id = ( PORT_READ(in_DEPTH_UPT_TAIL[context])+PORT_READ(in_DEPTH_UPT_NB_BRANCH [context]))%_param->_size_depth[context];270 branch_update_prediction_id = (_param->_have_port_depth[context])?((PORT_READ(in_DEPTH_UPT_TAIL[context])+PORT_READ(in_DEPTH_UPT_NB_BRANCH [context]))%_param->_size_depth[context]):0; 255 271 } 256 272 else … … 270 286 PORT_WRITE(out_PREDICT_PC_NEXT [context] , pc_next ); 271 287 PORT_WRITE(out_PREDICT_PC_NEXT_IS_DS_TAKE [context] , pc_next_is_ds_take ); 288 289 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * instruction enable :"); 290 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * nb_inst : %d",_param->_nb_instruction [context]); 291 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * [0:%d[ = 0",address_lsb); 292 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * [%d:%d[ = 1",address_lsb,((pc_current_is_ds_take)?1:address_msb)); 293 log_printf(TRACE,Prediction_unit_Glue,FUNCTION," * [%d:%d[ = 0",((pc_current_is_ds_take)?1:address_msb),_param->_nb_instruction [context]); 294 272 295 for (uint32_t j=0; j<address_lsb; j++) 273 296 PORT_WRITE(out_PREDICT_INSTRUCTION_ENABLE [context][j], 0); // Before the address : not valid -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_transition.cpp
r81 r82 27 27 { 28 28 reg_PREDICT_PRIORITY = 0; 29 reg_DECOD_PRIORITY = 0; 29 30 } 30 31 else 31 32 { 32 33 // Round robin priority 33 reg_PREDICT_PRIORITY = (reg_PREDICT_PRIORITY+_param->_nb_inst_predict)%_param->_nb_context; 34 reg_PREDICT_PRIORITY = (reg_PREDICT_PRIORITY+_param->_nb_inst_branch_predict)%_param->_nb_context; 35 reg_DECOD_PRIORITY = (reg_DECOD_PRIORITY +1)%_param->_nb_decod_unit; 34 36 } 35 37 #if defined(STATISTICS) or defined(VHDL_TESTBENCH) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp
r81 r82 7 7 */ 8 8 9 #define NB_ITERATION 16 10 #define CYCLE_MAX (1024*NB_ITERATION) 11 9 12 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/include/test.h" 10 13 #include "Common/include/Test.h" 11 14 #include "Behavioural/include/Allocation.h" 12 13 #define NB_ITERATION 1614 #define CYCLE_MAX (1024*NB_ITERATION)15 16 #define LABEL(str...) \17 { \18 msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time())); \19 msg (str); \20 msg (_("\n")); \21 } while(0)22 23 #define SC_START(cycle_offset) \24 do \25 { \26 uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \27 if (cycle_offset != 0) \28 { \29 cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]"; \30 cout << " (" << __LINE__ << ")" << endl; \31 } \32 \33 if (cycle_current > CYCLE_MAX) \34 { \35 TEST_KO("Maximal cycles Reached"); \36 } \37 \38 sc_start(cycle_offset); \39 \40 } while(0)41 15 42 16 void test (string name, … … 49 23 #endif 50 24 51 Return_Address_Stack * _Return_Address_Stack = new Return_Address_Stack (name.c_str(), 25 Return_Address_Stack * _Return_Address_Stack = new Return_Address_Stack 26 (name.c_str(), 52 27 #ifdef STATISTICS 53 28 _parameters_statistics, 54 29 #endif 55 _param); 30 _param, 31 USE_ALL); 56 32 57 33 #ifdef SYSTEMC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h
r81 r82 128 128 #endif 129 129 Parameters * param, 130 morpheo::behavioural::Tusage_t usage =USE_ALL130 morpheo::behavioural::Tusage_t usage 131 131 ); 132 132 public : ~Return_Address_Stack (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context.cfg
r81 r82 1 1 Prediction_unit 2 1 1 +1 # nb_context 3 1 1 +1 # nb_decod_unit 4 30 30 +1 # size_address 5 1 4 *4 # nb_instruction [0] [nb_context] 6 1 1 +1 # nb_inst_decod [0] [nb_decod_unit] 7 1 1 +1 # nb_inst_branch_predict 8 1 1 +1 # nb_inst_branch_decod 9 1 1 +1 # nb_inst_branch_update 10 1 1 +1 # nb_inst_branch_complete 11 2 8 *4 # btb_size_queue 12 2 2 +1 # btb_associativity 13 2 2 +1 # btb_size_counter 14 3 3 +1 # btb_victim_scheme 15 1 1 +1 # dir_predictor_scheme 16 1 1 +1 # dir_have_bht [0] [3] 17 1 1 +1 # dir_have_bht [1] [3] 18 1 1 +1 # dir_have_bht [2] [3] 19 1 1 +1 # dir_bht_size_shifter [0] [3] 20 1 1 +1 # dir_bht_size_shifter [1] [3] 21 1 1 +1 # dir_bht_size_shifter [2] [3] 22 1 1 +1 # dir_bht_nb_shifter [0] [3] 23 1 1 +1 # dir_bht_nb_shifter [1] [3] 24 1 1 +1 # dir_bht_nb_shifter [2] [3] 25 1 1 +1 # dir_have_pht [0] [3] 26 1 1 +1 # dir_have_pht [1] [3] 27 1 1 +1 # dir_have_pht [2] [3] 28 1 1 +1 # dir_pht_size_counter [0] [3] 29 1 1 +1 # dir_pht_size_counter [1] [3] 30 1 1 +1 # dir_pht_size_counter [2] [3] 31 1 1 +1 # dir_pht_nb_counter [0] [3] 32 1 1 +1 # dir_pht_nb_counter [1] [3] 33 1 1 +1 # dir_pht_nb_counter [2] [3] 34 1 1 +1 # dir_pht_size_address_share [0] [3] 35 1 1 +1 # dir_pht_size_address_share [1] [3] 36 1 1 +1 # dir_pht_size_address_share [2] [3] 37 2 4 *2 # ras_size_queue [0] [nb_context] 38 1 4 *4 # upt_size_queue [0] [nb_context] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/main.cpp
r81 r82 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/include/test.h" 9 9 10 #define NB_PARAMS 010 #define NB_PARAMS (12+3*7) 11 11 12 12 void usage (int argc, char * argv[]) … … 14 14 err (_("<Usage> %s name_instance list_params.\n"),argv[0]); 15 15 err (_("list_params is :\n")); 16 err (_(" * ()\n")); 16 err (_(" * nb_context (uint32_t )\n")); 17 err (_(" * nb_decod_unit (uint32_t )\n")); 18 err (_(" * size_address (uint32_t )\n")); 19 err (_(" * nb_instruction [nb_context] (uint32_t )\n")); 20 err (_(" * nb_inst_decod [nb_decod_unit](uint32_t )\n")); 21 err (_(" * nb_inst_branch_predict (uint32_t )\n")); 22 err (_(" * nb_inst_branch_decod (uint32_t )\n")); 23 err (_(" * nb_inst_branch_update (uint32_t )\n")); 24 err (_(" * nb_inst_branch_complete (uint32_t )\n")); 25 err (_(" * btb_size_queue (uint32_t )\n")); 26 err (_(" * btb_associativity (uint32_t )\n")); 27 err (_(" * btb_size_counter (uint32_t )\n")); 28 err (_(" * btb_victim_scheme (Tvictim_t )\n")); 29 err (_(" * dir_predictor_scheme (Tpredictor_t)\n")); 30 err (_(" * dir_have_bht [3] (bool )\n")); 31 err (_(" * dir_bht_size_shifter [3] (uint32_t )\n")); 32 err (_(" * dir_bht_nb_shifter [3] (uint32_t )\n")); 33 err (_(" * dir_have_pht [3] (bool )\n")); 34 err (_(" * dir_pht_size_counter [3] (uint32_t )\n")); 35 err (_(" * dir_pht_nb_counter [3] (uint32_t )\n")); 36 err (_(" * dir_pht_size_address_share [3] (uint32_t )\n")); 37 err (_(" * ras_size_queue [nb_context] (uint32_t )\n")); 38 err (_(" * upt_size_queue [nb_context] (uint32_t )\n")); 17 39 18 40 exit (1); … … 25 47 #endif 26 48 { 27 if (argc !=static_cast<int>(2+NB_PARAMS))49 if (argc < static_cast<int>(2+NB_PARAMS)) 28 50 usage (argc, argv); 29 51 … … 31 53 32 54 string name = argv[x++]; 33 //const uint32_t size_data = atoi(argv[x++]); 34 //const uint32_t nb_port = atoi(argv[x++]); 55 uint32_t _nb_context = fromString<uint32_t>(argv[x++]); 56 uint32_t _nb_decod_unit = fromString<uint32_t>(argv[x++]); 57 uint32_t _size_address = fromString<uint32_t>(argv[x++]); 58 59 if (argc != static_cast<int>(2+NB_PARAMS+3*_nb_context+_nb_decod_unit)) 60 usage (argc, argv); 61 62 uint32_t * _nb_instruction = new uint32_t [_nb_context]; 63 for (uint32_t i=0; i<_nb_context; i++) 64 _nb_instruction [i] = fromString<uint32_t >(argv[x++]); 65 uint32_t * _nb_inst_decod = new uint32_t [_nb_decod_unit]; 66 for (uint32_t i=0; i<_nb_decod_unit; i++) 67 _nb_inst_decod [i] = fromString<uint32_t >(argv[x++]); 68 uint32_t _nb_inst_branch_predict = fromString<uint32_t >(argv[x++]); 69 uint32_t _nb_inst_branch_decod = fromString<uint32_t >(argv[x++]); 70 uint32_t _nb_inst_branch_update = fromString<uint32_t >(argv[x++]); 71 uint32_t _nb_inst_branch_complete = fromString<uint32_t >(argv[x++]); 72 uint32_t _btb_size_queue = fromString<uint32_t >(argv[x++]); 73 uint32_t _btb_associativity = fromString<uint32_t >(argv[x++]); 74 uint32_t _btb_size_counter = fromString<uint32_t >(argv[x++]); 75 Tvictim_t _btb_victim_scheme = fromString<Tvictim_t >(argv[x++]); 76 Tpredictor_t _dir_predictor_scheme = fromString<Tpredictor_t>(argv[x++]); 77 bool _dir_have_bht [3]; 78 for (uint32_t i=0; i<3; i++) 79 _dir_have_bht [i] = fromString<bool >(argv[x++]); 80 uint32_t _dir_bht_size_shifter [3]; 81 for (uint32_t i=0; i<3; i++) 82 _dir_bht_size_shifter [i] = fromString<uint32_t >(argv[x++]); 83 uint32_t _dir_bht_nb_shifter [3]; 84 for (uint32_t i=0; i<3; i++) 85 _dir_bht_nb_shifter [i] = fromString<uint32_t >(argv[x++]); 86 bool _dir_have_pht [3]; 87 for (uint32_t i=0; i<3; i++) 88 _dir_have_pht [i] = fromString<bool >(argv[x++]); 89 uint32_t _dir_pht_size_counter [3]; 90 for (uint32_t i=0; i<3; i++) 91 _dir_pht_size_counter [i] = fromString<uint32_t >(argv[x++]); 92 uint32_t _dir_pht_nb_counter [3]; 93 for (uint32_t i=0; i<3; i++) 94 _dir_pht_nb_counter [i] = fromString<uint32_t >(argv[x++]); 95 uint32_t _dir_pht_size_address_share [3]; 96 for (uint32_t i=0; i<3; i++) 97 _dir_pht_size_address_share [i] = fromString<uint32_t >(argv[x++]); 98 uint32_t * _ras_size_queue = new uint32_t [_nb_context]; 99 for (uint32_t i=0; i<_nb_context; i++) 100 _ras_size_queue [i] = fromString<uint32_t >(argv[x++]); 101 uint32_t * _upt_size_queue = new uint32_t [_nb_context]; 102 for (uint32_t i=0; i<_nb_context; i++) 103 _upt_size_queue [i] = fromString<uint32_t >(argv[x++]); 35 104 36 105 int _return = EXIT_SUCCESS; … … 38 107 { 39 108 morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::Parameters 40 (//size_data, 41 //nb_port 42 ); 109 (_nb_context , 110 _nb_decod_unit , 111 _size_address , 112 _nb_instruction , 113 _nb_inst_decod , 114 _nb_inst_branch_predict , 115 _nb_inst_branch_decod , 116 _nb_inst_branch_update , 117 _nb_inst_branch_complete , 118 _btb_size_queue , 119 _btb_associativity , 120 _btb_size_counter , 121 _btb_victim_scheme , 122 _dir_predictor_scheme , 123 _dir_have_bht , 124 _dir_bht_size_shifter , 125 _dir_bht_nb_shifter , 126 _dir_have_pht , 127 _dir_pht_size_counter , 128 _dir_pht_nb_counter , 129 _dir_pht_size_address_share, 130 _ras_size_queue , 131 _upt_size_queue 132 ); 43 133 44 134 msg(_("%s"),param->print(1).c_str()); … … 57 147 } 58 148 149 delete [] _nb_instruction ; 150 delete [] _nb_inst_decod ; 151 delete [] _ras_size_queue ; 152 delete [] _upt_size_queue ; 153 59 154 return (_return); 60 155 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp
r81 r82 23 23 #endif 24 24 25 Prediction_unit * _Prediction_unit = new Prediction_unit (name.c_str(), 25 Prediction_unit * _Prediction_unit = new Prediction_unit 26 (name.c_str(), 26 27 #ifdef STATISTICS 27 _parameters_statistics, 28 #endif 29 _param); 28 _parameters_statistics, 29 #endif 30 _param, 31 USE_ALL); 30 32 31 33 #ifdef SYSTEMC … … 37 39 sc_clock * in_CLOCK = new sc_clock ("clock", 1.0, 0.5); 38 40 sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET"); 41 42 43 ALLOC1_SC_SIGNAL( in_PREDICT_VAL ," in_PREDICT_VAL ",Tcontrol_t ,_param->_nb_context); 44 ALLOC1_SC_SIGNAL(out_PREDICT_ACK ,"out_PREDICT_ACK ",Tcontrol_t ,_param->_nb_context); 45 ALLOC1_SC_SIGNAL( in_PREDICT_PC_PREVIOUS ," in_PREDICT_PC_PREVIOUS ",Taddress_t ,_param->_nb_context); 46 ALLOC1_SC_SIGNAL( in_PREDICT_PC_CURRENT ," in_PREDICT_PC_CURRENT ",Taddress_t ,_param->_nb_context); 47 ALLOC1_SC_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE ," in_PREDICT_PC_CURRENT_IS_DS_TAKE ",Tcontrol_t ,_param->_nb_context); 48 ALLOC1_SC_SIGNAL(out_PREDICT_PC_NEXT ,"out_PREDICT_PC_NEXT ",Taddress_t ,_param->_nb_context); 49 ALLOC1_SC_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE ,"out_PREDICT_PC_NEXT_IS_DS_TAKE ",Tcontrol_t ,_param->_nb_context); 50 ALLOC2_SC_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE ,"out_PREDICT_INSTRUCTION_ENABLE ",Tcontrol_t ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]); 51 ALLOC1_SC_SIGNAL(out_PREDICT_INST_IFETCH_PTR ,"out_PREDICT_INST_IFETCH_PTR ",Tinst_ifetch_ptr_t ,_param->_nb_context); 52 ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_STATE ,"out_PREDICT_BRANCH_STATE ",Tbranch_state_t ,_param->_nb_context); 53 ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,"out_PREDICT_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t ,_param->_nb_context); 54 55 ALLOC2_SC_SIGNAL( in_DECOD_VAL ," in_DECOD_VAL ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 56 ALLOC2_SC_SIGNAL(out_DECOD_ACK ,"out_DECOD_ACK ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 57 ALLOC2_SC_SIGNAL( in_DECOD_CONTEXT_ID ," in_DECOD_CONTEXT_ID ",Tcontext_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 58 ALLOC2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ," in_DECOD_MATCH_INST_IFETCH_PTR ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 59 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_STATE ," in_DECOD_BRANCH_STATE ",Tbranch_state_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 60 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID ," in_DECOD_BRANCH_UPDATE_PREDICTION_ID ",Tprediction_ptr_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 61 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION ," in_DECOD_BRANCH_CONDITION ",Tbranch_condition_t,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 62 ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION ," in_DECOD_BRANCH_DIRECTION ",Tcontrol_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 63 ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_SRC ," in_DECOD_ADDRESS_SRC ",Taddress_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 64 ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_DEST ," in_DECOD_ADDRESS_DEST ",Taddress_t ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 65 66 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL ," in_BRANCH_COMPLETE_VAL ",Tcontrol_t ,_param->_nb_inst_branch_complete); 67 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK ,"out_BRANCH_COMPLETE_ACK ",Tcontrol_t ,_param->_nb_inst_branch_complete); 68 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID ," in_BRANCH_COMPLETE_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_branch_complete); 69 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH ," in_BRANCH_COMPLETE_DEPTH ",Tdepth_t ,_param->_nb_inst_branch_complete); 70 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS ," in_BRANCH_COMPLETE_ADDRESS ",Taddress_t ,_param->_nb_inst_branch_complete); 71 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG ," in_BRANCH_COMPLETE_FLAG ",Tcontrol_t ,_param->_nb_inst_branch_complete); 72 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION ,"out_BRANCH_COMPLETE_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_branch_complete); 73 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE ,"out_BRANCH_COMPLETE_TAKE ",Tcontrol_t ,_param->_nb_inst_branch_complete); 74 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC ,"out_BRANCH_COMPLETE_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_complete); 75 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST ,"out_BRANCH_COMPLETE_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_complete); 76 77 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL ,"out_BRANCH_EVENT_VAL ",Tcontrol_t ,_param->_nb_context); 78 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK ," in_BRANCH_EVENT_ACK ",Tcontrol_t ,_param->_nb_context); 79 //ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID ,"out_BRANCH_EVENT_CONTEXT_ID ",Tcontext_t ,_param->_nb_context); 80 //ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_DEPTH ,"out_BRANCH_EVENT_DEPTH ",Tdepth_t ,_param->_nb_context); 81 //ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION ,"out_BRANCH_EVENT_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_context); 82 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC ,"out_BRANCH_EVENT_ADDRESS_SRC ",Taddress_t ,_param->_nb_context); 83 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST ,"out_BRANCH_EVENT_ADDRESS_DEST ",Taddress_t ,_param->_nb_context); 84 85 ALLOC1_SC_SIGNAL(out_DEPTH_NB_BRANCH ,"out_DEPTH_NB_BRANCH ",Tdepth_t ,_param->_nb_context); 86 ALLOC1_SC_SIGNAL(out_DEPTH_TAIL ,"out_DEPTH_TAIL ",Tdepth_t ,_param->_nb_context); 39 87 40 88 /******************************************************** … … 47 95 (*(_Prediction_unit->in_NRESET)) (*(in_NRESET)); 48 96 97 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_VAL ,_param->_nb_context); 98 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_ACK ,_param->_nb_context); 99 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_PREVIOUS ,_param->_nb_context); 100 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_CURRENT ,_param->_nb_context); 101 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_CURRENT_IS_DS_TAKE ,_param->_nb_context); 102 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_PC_NEXT ,_param->_nb_context); 103 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_PC_NEXT_IS_DS_TAKE ,_param->_nb_context); 104 INSTANCE2_SC_SIGNAL(_Prediction_unit,out_PREDICT_INSTRUCTION_ENABLE ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]); 105 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_BRANCH_STATE ,_param->_nb_context); 106 107 for (uint32_t i=0; i<_param->_nb_context; i++) 108 { 109 if (_param->_have_port_inst_ifetch_ptr [i]) 110 INSTANCE_SC_SIGNAL(_Prediction_unit,out_PREDICT_INST_IFETCH_PTR [i]); 111 if (_param->_have_port_depth [i]) 112 INSTANCE_SC_SIGNAL(_Prediction_unit,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]); 113 } 114 115 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 116 INSTANCE2_SC_SIGNAL(_Prediction_unit,out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 117 if (_param->_have_port_context_id) 118 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 119 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 120 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 121 if (_param->_have_port_max_depth) 122 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_UPDATE_PREDICTION_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 123 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 124 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 125 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 126 INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 127 128 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_VAL ,_param->_nb_inst_branch_complete); 129 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ACK ,_param->_nb_inst_branch_complete); 130 if (_param->_have_port_context_id) 131 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_CONTEXT_ID ,_param->_nb_inst_branch_complete); 132 if (_param->_have_port_max_depth) 133 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_DEPTH ,_param->_nb_inst_branch_complete); 134 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_ADDRESS ,_param->_nb_inst_branch_complete); 135 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_FLAG ,_param->_nb_inst_branch_complete); 136 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_MISS_PREDICTION ,_param->_nb_inst_branch_complete); 137 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_TAKE ,_param->_nb_inst_branch_complete); 138 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ADDRESS_SRC ,_param->_nb_inst_branch_complete); 139 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ADDRESS_DEST ,_param->_nb_inst_branch_complete); 140 141 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_VAL ,_param->_nb_context); 142 INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_EVENT_ACK ,_param->_nb_context); 143 //if (_param->_have_port_context_id) 144 //INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_CONTEXT_ID ,_param->_nb_context); 145 //INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_DEPTH ,_param->_nb_context); 146 //INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_MISS_PREDICTION ,_param->_nb_context); 147 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_ADDRESS_SRC ,_param->_nb_context); 148 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 149 150 INSTANCE1_SC_SIGNAL(_Prediction_unit,out_DEPTH_NB_BRANCH ,_param->_nb_context); 151 for (uint32_t i=0; i<_param->_nb_context; i++) 152 if (_param->_have_port_depth[i]) 153 INSTANCE_SC_SIGNAL(_Prediction_unit,out_DEPTH_TAIL [i]); 49 154 50 155 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 91 196 delete in_CLOCK; 92 197 delete in_NRESET; 198 199 DELETE1_SC_SIGNAL( in_PREDICT_VAL ,_param->_nb_context); 200 DELETE1_SC_SIGNAL(out_PREDICT_ACK ,_param->_nb_context); 201 DELETE1_SC_SIGNAL( in_PREDICT_PC_PREVIOUS ,_param->_nb_context); 202 DELETE1_SC_SIGNAL( in_PREDICT_PC_CURRENT ,_param->_nb_context); 203 DELETE1_SC_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE ,_param->_nb_context); 204 DELETE1_SC_SIGNAL(out_PREDICT_PC_NEXT ,_param->_nb_context); 205 DELETE1_SC_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE ,_param->_nb_context); 206 DELETE1_SC_SIGNAL(out_PREDICT_INST_IFETCH_PTR ,_param->_nb_context); 207 DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_STATE ,_param->_nb_context); 208 DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context); 209 210 DELETE2_SC_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]); 211 DELETE2_SC_SIGNAL( in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 212 DELETE2_SC_SIGNAL(out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 213 DELETE2_SC_SIGNAL( in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 214 DELETE2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 215 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 216 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 217 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 218 DELETE2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 219 DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 220 DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 221 222 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL ,_param->_nb_inst_branch_complete); 223 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK ,_param->_nb_inst_branch_complete); 224 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID ,_param->_nb_inst_branch_complete); 225 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH ,_param->_nb_inst_branch_complete); 226 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS ,_param->_nb_inst_branch_complete); 227 DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG ,_param->_nb_inst_branch_complete); 228 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete); 229 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE ,_param->_nb_inst_branch_complete); 230 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC ,_param->_nb_inst_branch_complete); 231 DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST ,_param->_nb_inst_branch_complete); 232 233 DELETE1_SC_SIGNAL(out_BRANCH_EVENT_VAL ,_param->_nb_context); 234 DELETE1_SC_SIGNAL( in_BRANCH_EVENT_ACK ,_param->_nb_context); 235 //DELETE1_SC_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID ,_param->_nb_context); 236 //DELETE1_SC_SIGNAL(out_BRANCH_EVENT_DEPTH ,_param->_nb_context); 237 //DELETE1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context); 238 DELETE1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC ,_param->_nb_context); 239 DELETE1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 240 241 DELETE1_SC_SIGNAL(out_DEPTH_NB_BRANCH ,_param->_nb_context); 242 DELETE1_SC_SIGNAL(out_DEPTH_TAIL ,_param->_nb_context); 93 243 #endif 94 244 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp
r81 r82 71 71 ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS ," in_DECOD_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_decod); 72 72 ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX ," in_DECOD_RAS_INDEX ",Tptr_t ,_param->_nb_inst_decod); 73 ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t ,_param->_nb_inst_decod); 73 ALLOC1_SC_SIGNAL( in_DECOD_MISS_IFETCH ," in_DECOD_MISS_IFETCH ",Tcontrol_t ,_param->_nb_inst_decod); 74 ALLOC1_SC_SIGNAL( in_DECOD_MISS_DECOD ," in_DECOD_MISS_DECOD ",Tcontrol_t ,_param->_nb_inst_decod); 74 75 ALLOC1_SC_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID ," in_DECOD_UPDATE_PREDICTION_ID ",Tprediction_ptr_t ,_param->_nb_inst_decod); 75 76 //ALLOC1_SC_SIGNAL(out_DECOD_DEPTH ,"out_DECOD_DEPTH ",Tdepth_t ,_param->_nb_inst_decod); 77 76 78 ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL ," in_BRANCH_COMPLETE_VAL ",Tcontrol_t ,_param->_nb_inst_branch_complete); 77 79 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK ,"out_BRANCH_COMPLETE_ACK ",Tcontrol_t ,_param->_nb_inst_branch_complete); … … 84 86 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC ,"out_BRANCH_COMPLETE_ADDRESS_SRC ",Taddress_t ,_param->_nb_inst_branch_complete); 85 87 ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST ,"out_BRANCH_COMPLETE_ADDRESS_DEST ",Taddress_t ,_param->_nb_inst_branch_complete); 88 89 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL ,"out_BRANCH_EVENT_VAL ",Tcontrol_t ,_param->_nb_context); 90 ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK ," in_BRANCH_EVENT_ACK ",Tcontrol_t ,_param->_nb_context); 91 // ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID ," in_BRANCH_EVENT_CONTEXT_ID ",Tcontext_t ,_param->_nb_context); 92 // ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH ," in_BRANCH_EVENT_DEPTH ",Tdepth_t ,_param->_nb_context); 93 // ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t ,_param->_nb_context); 94 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC ,"out_BRANCH_EVENT_ADDRESS_SRC ",Taddress_t ,_param->_nb_context); 95 ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST ,"out_BRANCH_EVENT_ADDRESS_DEST ",Taddress_t ,_param->_nb_context); 96 86 97 ALLOC1_SC_SIGNAL(out_UPDATE_VAL ,"out_UPDATE_VAL ",Tcontrol_t ,_param->_nb_inst_update); 87 98 ALLOC1_SC_SIGNAL( in_UPDATE_ACK ," in_UPDATE_ACK ",Tcontrol_t ,_param->_nb_inst_update); … … 96 107 ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY ,"out_UPDATE_DIR_HISTORY ",Thistory_t ,_param->_nb_inst_update); 97 108 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL ,"out_UPDATE_RAS_VAL ",Tcontrol_t ,_param->_nb_inst_update); 109 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH ,"out_UPDATE_RAS_PUSH ",Tcontrol_t ,_param->_nb_inst_update); 98 110 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS ,"out_UPDATE_RAS_ADDRESS ",Taddress_t ,_param->_nb_inst_update); 99 111 ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX ,"out_UPDATE_RAS_INDEX ",Tptr_t ,_param->_nb_inst_update); … … 136 148 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_ADDRESS ,_param->_nb_inst_decod); 137 149 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_INDEX ,_param->_nb_inst_decod); 138 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod); 139 if (_param->_have_port_depth) 150 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_IFETCH ,_param->_nb_inst_decod); 151 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_DECOD ,_param->_nb_inst_decod); 152 if (_param->_have_port_max_depth) 140 153 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_UPDATE_PREDICTION_ID ,_param->_nb_inst_decod); 141 154 //if (_param->_have_port_depth) … … 145 158 if (_param->_have_port_context_id) 146 159 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_CONTEXT_ID ,_param->_nb_inst_branch_complete); 147 if (_param->_have_port_ depth)160 if (_param->_have_port_max_depth) 148 161 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH ,_param->_nb_inst_branch_complete); 149 162 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS ,_param->_nb_inst_branch_complete); … … 153 166 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_SRC ,_param->_nb_inst_branch_complete); 154 167 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_DEST ,_param->_nb_inst_branch_complete); 168 169 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL ,_param->_nb_context); 170 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK ,_param->_nb_context); 171 // if (_param->_have_port_context_id) 172 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID ,_param->_nb_context); 173 // if (_param->_have_port_max_depth) 174 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH ,_param->_nb_context); 175 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS ,_param->_nb_context); 176 // INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context); 177 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC ,_param->_nb_context); 178 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context); 179 155 180 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_VAL ,_param->_nb_inst_update); 156 181 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_UPDATE_ACK ,_param->_nb_inst_update); … … 167 192 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_HISTORY ,_param->_nb_inst_update); 168 193 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_VAL ,_param->_nb_inst_update); 194 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PUSH ,_param->_nb_inst_update); 169 195 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_ADDRESS ,_param->_nb_inst_update); 170 196 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_INDEX ,_param->_nb_inst_update); 171 197 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PREDICTION_IFETCH ,_param->_nb_inst_update); 172 if (_param->_have_port_depth) 173 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH ,_param->_nb_context); 174 if (_param->_have_port_depth) 175 INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL ,_param->_nb_context); 198 for (uint32_t i=0; i<_param->_nb_context; i++) 199 { 200 if (_param->_have_port_depth[i]) 201 { 202 INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL [i]); 203 } 204 INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH [i]); 205 } 176 206 177 207 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 202 232 SC_START(5); 203 233 in_NRESET->write(1); 234 235 for (uint32_t i=0; i<_param->_nb_context; i++) 236 { 237 PORT_WRITE(in_BRANCH_EVENT_ACK [i],1); 238 } 204 239 205 240 LABEL("Loop of Test"); … … 236 271 in_PREDICT_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 237 272 238 if (_param->_have_port_depth )273 if (_param->_have_port_depth[context]) 239 274 { 240 275 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 276 } 241 277 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i); 242 }278 243 279 SC_START(0); 244 280 … … 256 292 in_PREDICT_VAL [port]->write(0); 257 293 258 if (_param->_have_port_depth )294 if (_param->_have_port_depth[context]) 259 295 { 260 296 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 297 } 261 298 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1); 262 } 299 263 300 } 264 301 } … … 283 320 in_DECOD_RAS_ADDRESS [port]->write(0xdeaddead+i); 284 321 in_DECOD_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 285 in_DECOD_MISS_PREDICTION [port]->write(false); 322 in_DECOD_MISS_IFETCH [port]->write(false); 323 in_DECOD_MISS_DECOD [port]->write(false); 286 324 in_DECOD_UPDATE_PREDICTION_ID [port]->write(i); 287 325 288 if (_param->_have_port_depth )326 if (_param->_have_port_depth[context]) 289 327 { 290 328 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 329 } 291 330 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 292 }293 331 294 332 SC_START(0); … … 307 345 in_DECOD_VAL [port]->write(0); 308 346 309 if (_param->_have_port_depth )347 if (_param->_have_port_depth[context]) 310 348 { 311 349 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 350 } 312 351 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 313 }314 352 } 315 353 } … … 331 369 in_BRANCH_COMPLETE_FLAG [port]->write(1); 332 370 333 if (_param->_have_port_depth )371 if (_param->_have_port_depth[context]) 334 372 { 335 373 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 374 } 336 375 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 337 }338 376 339 377 SC_START(0); … … 357 395 in_BRANCH_COMPLETE_VAL [port]->write(0); 358 396 359 if (_param->_have_port_depth )397 if (_param->_have_port_depth[context]) 360 398 { 361 399 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 400 } 362 401 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 363 }364 402 } 365 403 } … … 396 434 TEST(Thistory_t ,out_UPDATE_DIR_HISTORY [port]->read(), i); 397 435 TEST(Tcontrol_t ,out_UPDATE_RAS_VAL [port]->read(), 0); 436 TEST(Tcontrol_t ,out_UPDATE_RAS_PUSH [port]->read(), 0); 398 437 TEST(Taddress_t ,out_UPDATE_RAS_ADDRESS [port]->read(), 0xdeaddead+i); 399 438 TEST(Tptr_t ,out_UPDATE_RAS_INDEX [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]); … … 411 450 412 451 // wait the garbage collector 413 if (_param->_have_port_depth) 414 while ((out_DEPTH_TAIL [context]->read() != 0) and 415 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 416 { 417 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); 418 SC_START(1); 419 } 452 while ((not (_param->_have_port_depth[context]) or (out_DEPTH_TAIL [context]->read() != 0)) and 453 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 454 { 455 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); 456 SC_START(1); 457 } 420 458 } 421 459 } … … 448 486 in_PREDICT_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 449 487 450 if (_param->_have_port_depth )488 if (_param->_have_port_depth[context]) 451 489 { 452 490 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 491 } 453 492 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i); 454 } 493 455 494 SC_START(0); 456 495 … … 468 507 in_PREDICT_VAL [port]->write(0); 469 508 470 if (_param->_have_port_depth )509 if (_param->_have_port_depth[context]) 471 510 { 472 511 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 512 } 473 513 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1); 474 }475 514 } 476 515 } … … 495 534 in_DECOD_RAS_ADDRESS [port]->write(0xdeaddead+i); 496 535 in_DECOD_RAS_INDEX [port]->write((0x12345678+i)%_param->_size_ras_index[context]); 497 in_DECOD_MISS_PREDICTION [port]->write(false); 536 in_DECOD_MISS_IFETCH [port]->write(false); 537 in_DECOD_MISS_DECOD [port]->write(false); 498 538 in_DECOD_UPDATE_PREDICTION_ID [port]->write(i); 499 539 500 if (_param->_have_port_depth )540 if (_param->_have_port_depth[context]) 501 541 { 502 542 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 543 } 503 544 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 504 }505 545 506 546 SC_START(0); … … 519 559 in_DECOD_VAL [port]->write(0); 520 560 521 if (_param->_have_port_depth )561 if (_param->_have_port_depth[context]) 522 562 { 523 563 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 564 } 524 565 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 525 }526 566 } 527 567 } … … 543 583 in_BRANCH_COMPLETE_FLAG [port]->write(0); 544 584 545 if (_param->_have_port_depth )585 if (_param->_have_port_depth[context]) 546 586 { 547 587 TEST(Tdepth_t,out_DEPTH_TAIL [context]->read(), 0); 588 } 548 589 TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]); 549 }550 590 551 591 SC_START(0); … … 604 644 TEST(Thistory_t ,out_UPDATE_DIR_HISTORY [port]->read(), i); 605 645 TEST(Tcontrol_t ,out_UPDATE_RAS_VAL [port]->read(), 0); 646 TEST(Tcontrol_t ,out_UPDATE_RAS_PUSH [port]->read(), 0); 606 647 TEST(Taddress_t ,out_UPDATE_RAS_ADDRESS [port]->read(), 0xdeaddead+i); 607 648 TEST(Tptr_t ,out_UPDATE_RAS_INDEX [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]); … … 619 660 620 661 // wait the garbage collector 621 if (_param->_have_port_depth) 622 while ((out_DEPTH_TAIL [context]->read() != 0) and 623 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 662 while (((not (_param->_have_port_depth[context])) or (out_DEPTH_TAIL [context]->read() != 0)) and 663 (out_DEPTH_NB_BRANCH[context]->read() != 0)) 624 664 { 625 665 LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read()); … … 671 711 delete [] in_DECOD_RAS_ADDRESS ; 672 712 delete [] in_DECOD_RAS_INDEX ; 673 delete [] in_DECOD_MISS_PREDICTION ; 713 delete [] in_DECOD_MISS_IFETCH ; 714 delete [] in_DECOD_MISS_DECOD ; 674 715 delete [] in_DECOD_UPDATE_PREDICTION_ID ; 675 716 //delete [] out_DECOD_DEPTH ; … … 686 727 delete [] out_BRANCH_COMPLETE_ADDRESS_SRC ; 687 728 delete [] out_BRANCH_COMPLETE_ADDRESS_DEST ; 729 730 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 731 delete [] out_BRANCH_EVENT_VAL ; 732 delete [] in_BRANCH_EVENT_ACK ; 733 // delete [] in_BRANCH_EVENT_CONTEXT_ID ; 734 // delete [] in_BRANCH_EVENT_DEPTH ; 735 // delete [] out_BRANCH_EVENT_MISS_PREDICTION; 736 delete [] out_BRANCH_EVENT_ADDRESS_SRC ; 737 delete [] out_BRANCH_EVENT_ADDRESS_DEST ; 688 738 689 739 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 700 750 delete [] out_UPDATE_DIR_HISTORY ; 701 751 delete [] out_UPDATE_RAS_VAL ; 752 delete [] out_UPDATE_RAS_PUSH ; 702 753 delete [] out_UPDATE_RAS_ADDRESS ; 703 754 delete [] out_UPDATE_RAS_INDEX ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
r81 r82 35 35 36 36 public : uint32_t _size_context_id ; 37 public : uint32_t _size_depth ; 37 public : uint32_t * _size_depth ; // [nb_context] 38 public : uint32_t _max_size_depth ; 38 39 public : uint32_t _max_size_ras_index ; 39 40 40 41 public : bool _have_port_context_id ; 41 public : bool _have_port_depth ; 42 public : bool * _have_port_depth ; // [nb_context] 43 public : bool _have_port_max_depth ; 42 44 public : bool _have_port_history ; 43 45 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h
r81 r82 24 24 UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor 25 25 UPDATE_PREDICTION_STATE_WAITEND , // Have make a prediction, wait branch_complete 26 UPDATE_PREDICTION_STATE_EVENT , // have a event - must signal at the context_unit 26 27 UPDATE_PREDICTION_STATE_OK , // branch is complete and can update predictor 27 28 UPDATE_PREDICTION_STATE_KO , // have a event - must update predictor unit … … 58 59 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break; 59 60 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAITEND : return "waitend" ; break; 61 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT : return "event" ; break; 60 62 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK : return "ok" ; break; 61 63 case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO : return "ko" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h
r81 r82 88 88 public : SC_IN (Taddress_t ) ** in_DECOD_RAS_ADDRESS ; //[nb_inst_decod] 89 89 public : SC_IN (Tptr_t ) ** in_DECOD_RAS_INDEX ; //[nb_inst_decod] 90 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_PREDICTION ; //[nb_inst_decod] // ifetch is a miss pred 90 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_IFETCH ; //[nb_inst_decod] 91 public : SC_IN (Tcontrol_t ) ** in_DECOD_MISS_DECOD ; //[nb_inst_decod] 91 92 public : SC_IN (Tprediction_ptr_t ) ** in_DECOD_UPDATE_PREDICTION_ID ; //[nb_inst_decod] 92 93 //public : SC_OUT(Tdepth_t ) ** out_DECOD_DEPTH ; //[nb_inst_decod] … … 103 104 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_SRC ; //[nb_inst_branch_complete] 104 105 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_DEST ; //[nb_inst_branch_complete] 106 107 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_VAL ; //[nb_context] 109 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ACK ; //[nb_context] 110 //public : SC_OUT(Tcontext_t ) ** out_BRANCH_EVENT_CONTEXT_ID ; //[nb_context] 111 //public : SC_OUT(Tdepth_t ) ** out_BRANCH_EVENT_DEPTH ; //[nb_context] 112 //public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_MISS_PREDICTION; //[nb_context] is always miss prediction 113 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_SRC ; //[nb_context] 114 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_DEST ; //[nb_context] 105 115 106 116 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 117 127 public : SC_OUT(Thistory_t ) ** out_UPDATE_DIR_HISTORY ; //[nb_inst_update] 118 128 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_VAL ; //[nb_inst_update] 129 public : SC_OUT(Tcontrol_t ) ** out_UPDATE_RAS_PUSH ; //[nb_inst_update] 119 130 public : SC_OUT(Taddress_t ) ** out_UPDATE_RAS_ADDRESS ; //[nb_inst_update] 120 131 public : SC_OUT(Tptr_t ) ** out_UPDATE_RAS_INDEX ; //[nb_inst_update] … … 131 142 private : uint32_t * reg_BOTTOM ; //[nb_context] 132 143 private : uint32_t * reg_NB_ELT ; //[nb_context] 144 private : uint32_t * reg_NB_ELT_UPDATE ; //[nb_context] 133 145 private : uint32_t * reg_NB_ELT_NEED_UPDATE ; //[nb_context] 134 146 private : entry_t ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue] … … 142 154 private : Tcontrol_t * internal_BRANCH_COMPLETE_TAKE ; //[nb_inst_branch_complete] 143 155 private : Taddress_t * internal_BRANCH_COMPLETE_ADDRESS_DEST ; //[nb_inst_branch_complete] 156 private : Tcontrol_t * internal_BRANCH_EVENT_VAL ; //[nb_context] 157 private : Tdepth_t * internal_BRANCH_EVENT_DEPTH ; //[nb_context] 144 158 private : Tcontrol_t * internal_UPDATE_VAL ; //[nb_inst_update] 145 159 private : Tcontext_t * internal_UPDATE_CONTEXT_ID ; //[nb_inst_update] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
r81 r82 43 43 44 44 _size_context_id = log2(nb_context); 45 _size_depth = log2(max<uint32_t>(size_queue,nb_context)); 45 _size_depth = new uint32_t[_nb_context]; 46 _have_port_depth = new bool [_nb_context]; 47 for (uint32_t i=0; i<_nb_context; i++) 48 { 49 _size_depth [i] = log2(_size_queue[i]); 50 _have_port_depth [i] = (_size_depth [i] > 0); 51 } 52 _max_size_depth = max<uint32_t>(_size_depth,_nb_context); 46 53 _max_size_ras_index = max<uint32_t>(_size_ras_index,nb_context); 47 54 48 55 _have_port_context_id = _size_context_id> 0; 49 _have_port_ depth = _size_depth> 0;56 _have_port_max_depth = _max_size_depth > 0; 50 57 _have_port_history = _size_history > 0; 51 58 … … 68 75 { 69 76 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); 77 delete [] _size_depth ; 78 delete [] _have_port_depth; 70 79 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 71 80 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp
r81 r82 27 27 Parameters_test test ("Update_Prediction_Table"); 28 28 29 if (morpheo::behavioural::test<Tdepth_t>(_ size_depth) == false)29 if (morpheo::behavioural::test<Tdepth_t>(_max_size_depth) == false) 30 30 test.error("type \"Tdepth_t\" is too small."); 31 31 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp
r81 r82 128 128 if (_param->_have_port_context_id) 129 129 sensitive << (*(in_DECOD_CONTEXT_ID [i])); 130 sensitive << (*(in_DECOD_MISS_PREDICTION [i])); 130 sensitive << (*(in_DECOD_MISS_IFETCH [i])) 131 << (*(in_DECOD_MISS_DECOD [i])); 131 132 } 132 133 … … 135 136 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 136 137 { 137 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_PREDICTION [i])); 138 if (_param->_have_port_context_id) 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 138 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_IFETCH [i])); 139 (*(out_DECOD_ACK [i])) (*(in_DECOD_MISS_DECOD [i])); 140 if (_param->_have_port_context_id) 141 (*(out_DECOD_ACK [i])) (*(in_DECOD_CONTEXT_ID [i])); 140 142 } 141 143 # endif … … 150 152 if (_param->_have_port_context_id) 151 153 sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 152 if (_param->_have_port_ depth)154 if (_param->_have_port_max_depth) 153 155 sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i])); 154 156 sensitive << (*(in_BRANCH_COMPLETE_FLAG [i])) … … 162 164 if (_param->_have_port_context_id) 163 165 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 164 if (_param->_have_port_ depth)166 if (_param->_have_port_max_depth) 165 167 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 166 168 (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 169 171 if (_param->_have_port_context_id) 170 172 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 171 if (_param->_have_port_ depth)173 if (_param->_have_port_max_depth) 172 174 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 173 175 (*(out_BRANCH_COMPLETE_TAKE [i])) (*(in_BRANCH_COMPLETE_FLAG [i])); … … 175 177 if (_param->_have_port_context_id) 176 178 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 177 if (_param->_have_port_ depth)179 if (_param->_have_port_max_depth) 178 180 (*(out_BRANCH_COMPLETE_ADDRESS_SRC [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 179 181 180 182 if (_param->_have_port_context_id) 181 183 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i])); 182 if (_param->_have_port_ depth)184 if (_param->_have_port_max_depth) 183 185 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_DEPTH [i])); 184 186 (*(out_BRANCH_COMPLETE_ADDRESS_DEST [i])) (*(in_BRANCH_COMPLETE_ADDRESS [i])); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r81 r82 76 76 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 77 { 78 ALLOC1_INTERFACE(" predict", IN,SOUTH, "predict", _param->_nb_inst_predict);78 ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_predict); 79 79 80 80 ALLOC1_VALACK_IN ( in_DECOD_VAL ,VAL); … … 87 87 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 88 88 ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION ,"miss_prediction" ,Tcontrol_t ,1); 90 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_size_depth); 89 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH ,"miss_ifetch" ,Tcontrol_t ,1); 90 ALLOC1_SIGNAL_IN ( in_DECOD_MISS_DECOD ,"miss_decod" ,Tcontrol_t ,1); 91 ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t ,_param->_max_size_depth); 91 92 // ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH ,"depth" ,Tdepth_t ,_param->_size_depth); 92 93 } … … 95 96 { 96 97 ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete); 97 98 98 99 99 ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL ,VAL); 100 100 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK ,ACK); 101 101 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_ size_depth);102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 103 103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_address); 104 104 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG ,"flag" ,Tcontrol_t,1); … … 107 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 108 108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 } 110 111 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 112 { 113 ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context); 114 115 ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL ,VAL); 116 ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK ,ACK); 117 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 118 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 119 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 120 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 121 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 122 } 110 123 … … 125 138 ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY ,"dir_history" ,Thistory_t ,_param->_size_history); 126 139 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL ,"ras_val" ,Tcontrol_t ,1); 140 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH ,"ras_push" ,Tcontrol_t ,1); 127 141 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS ,"ras_address" ,Taddress_t ,_param->_size_address); 128 142 ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX ,"ras_index" ,Tptr_t ,_param->_max_size_ras_index); … … 134 148 ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context); 135 149 136 ALLOC1_SIGNAL_OUT(out_DEPTH_ NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth);137 ALLOC1_SIGNAL_OUT(out_DEPTH_ TAIL,"TAIL",Tdepth_t,_param->_size_depth);150 ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL ,"TAIL" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 151 ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1); 138 152 } 139 153 … … 145 159 internal_BRANCH_COMPLETE_TAKE = new Tcontrol_t [_param->_nb_inst_branch_complete]; 146 160 internal_BRANCH_COMPLETE_ADDRESS_DEST = new Taddress_t [_param->_nb_inst_branch_complete]; 161 internal_BRANCH_EVENT_VAL = new Tcontrol_t [_param->_nb_context]; 162 internal_BRANCH_EVENT_DEPTH = new Tdepth_t [_param->_nb_context]; 147 163 internal_UPDATE_VAL = new Tcontrol_t [_param->_nb_inst_update]; 148 164 internal_UPDATE_CONTEXT_ID = new Tcontext_t [_param->_nb_inst_update]; … … 153 169 reg_BOTTOM = new uint32_t [_param->_nb_context]; 154 170 reg_NB_ELT = new uint32_t [_param->_nb_context]; 171 reg_NB_ELT_UPDATE = new uint32_t [_param->_nb_context]; 155 172 reg_NB_ELT_NEED_UPDATE = new uint32_t [_param->_nb_context]; 156 173 reg_UPDATE_PREDICTION_TABLE = new entry_t * [_param->_nb_context]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp
r81 r82 56 56 delete [] in_DECOD_RAS_ADDRESS ; 57 57 delete [] in_DECOD_RAS_INDEX ; 58 delete [] in_DECOD_MISS_PREDICTION ; 59 if (_param->_have_port_depth) 58 delete [] in_DECOD_MISS_IFETCH ; 59 delete [] in_DECOD_MISS_DECOD ; 60 if (_param->_have_port_max_depth) 60 61 delete [] in_DECOD_UPDATE_PREDICTION_ID ; 61 62 // if (_param->_have_port_depth) … … 67 68 if (_param->_have_port_context_id) 68 69 delete [] in_BRANCH_COMPLETE_CONTEXT_ID ; 69 if (_param->_have_port_ depth)70 if (_param->_have_port_max_depth) 70 71 delete [] in_BRANCH_COMPLETE_DEPTH ; 71 72 delete [] in_BRANCH_COMPLETE_ADDRESS ; … … 75 76 delete [] out_BRANCH_COMPLETE_ADDRESS_SRC ; 76 77 delete [] out_BRANCH_COMPLETE_ADDRESS_DEST ; 78 79 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 80 delete [] out_BRANCH_EVENT_VAL ; 81 delete [] in_BRANCH_EVENT_ACK ; 82 // if (_param->_have_port_context_id) 83 // delete [] in_BRANCH_EVENT_CONTEXT_ID ; 84 // if (_param->_have_port_max_depth) 85 // delete [] in_BRANCH_EVENT_DEPTH ; 86 // delete [] out_BRANCH_EVENT_MISS_PREDICTION; 87 delete [] out_BRANCH_EVENT_ADDRESS_SRC ; 88 delete [] out_BRANCH_EVENT_ADDRESS_DEST ; 77 89 78 90 // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 91 103 delete [] out_UPDATE_DIR_HISTORY ; 92 104 delete [] out_UPDATE_RAS_VAL ; 105 delete [] out_UPDATE_RAS_PUSH ; 93 106 delete [] out_UPDATE_RAS_ADDRESS ; 94 107 delete [] out_UPDATE_RAS_INDEX ; … … 96 109 97 110 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 98 if (_param->_have_port_ depth)111 if (_param->_have_port_max_depth) 99 112 { 100 113 delete [] out_DEPTH_NB_BRANCH; … … 110 123 delete [] internal_BRANCH_COMPLETE_TAKE ; 111 124 delete [] internal_BRANCH_COMPLETE_ADDRESS_DEST ; 125 delete [] internal_BRANCH_EVENT_VAL ; 126 delete [] internal_BRANCH_EVENT_DEPTH ; 112 127 delete [] internal_UPDATE_VAL ; 113 128 delete [] internal_UPDATE_CONTEXT_ID ; … … 118 133 delete [] reg_BOTTOM; 119 134 delete [] reg_NB_ELT; 135 delete [] reg_NB_ELT_UPDATE; 120 136 delete [] reg_NB_ELT_NEED_UPDATE; 121 137 for (uint32_t i=0; i<_param->_nb_context; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp
r81 r82 27 27 { 28 28 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 29 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;29 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 30 30 Tcontrol_t miss = false; 31 31 Tcontrol_t take = reg_UPDATE_PREDICTION_TABLE [context][depth]._last_take ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
r81 r82 26 26 for (uint32_t i=0; i<_param->_nb_inst_decod; i++) 27 27 { 28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_ PREDICTION[i]);28 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_DECOD [i]); 29 29 30 30 if (miss) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
r81 r82 28 28 // =================================================================== 29 29 30 if (_param->_have_port_depth) 31 for (uint32_t i=0; i<_param->_nb_context; i++) 32 { 33 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 30 for (uint32_t i=0; i<_param->_nb_context; i++) 31 { 32 if (_param->_have_port_depth [i]) 33 { 34 PORT_WRITE(out_DEPTH_TAIL [i], reg_BOTTOM [i]); 35 } 36 PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]); 37 } 37 38 // =================================================================== 38 39 // =====[ UPDATE ]==================================================== … … 72 73 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or 73 74 (cond == BRANCH_CONDITION_READ_STACK)); 74 75 76 Tcontrol_t push = ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK) or 77 (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK)); 78 75 79 if (_param->_have_port_context_id) 76 80 PORT_WRITE(out_UPDATE_CONTEXT_ID [i],context); … … 85 89 PORT_WRITE(out_UPDATE_DIR_HISTORY [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._history ); 86 90 PORT_WRITE(out_UPDATE_RAS_VAL [i],ras_val); 91 PORT_WRITE(out_UPDATE_RAS_PUSH [i],push); 87 92 PORT_WRITE(out_UPDATE_RAS_ADDRESS [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras ); 88 93 PORT_WRITE(out_UPDATE_RAS_INDEX [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras ); … … 99 104 } 100 105 106 // =================================================================== 107 // =====[ BRANCH_EVENT ]============================================== 108 // =================================================================== 109 for (uint32_t i=0; i<_param->_nb_context; i++) 110 { 111 Tdepth_t depth = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i]; 112 state_t state = reg_UPDATE_PREDICTION_TABLE [i][depth]._state; 113 114 Tcontrol_t val = (state == UPDATE_PREDICTION_STATE_EVENT); 115 116 if (val) 117 { 118 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src ); 119 PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest); 120 internal_BRANCH_EVENT_DEPTH [i] = depth; 121 } 122 123 internal_BRANCH_EVENT_VAL [i] = val; 124 PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]); 125 } 101 126 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End"); 102 127 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r81 r82 31 31 reg_BOTTOM [i] = 0; 32 32 reg_NB_ELT [i] = 0; 33 reg_NB_ELT_UPDATE [i] = 0; 33 34 reg_NB_ELT_NEED_UPDATE [i] = 0; 34 35 for (uint32_t j=0; j<_param->_size_queue[i]; j++) … … 74 75 if (PORT_READ(in_DECOD_VAL[i]) and internal_DECOD_ACK [i]) 75 76 { 76 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 77 Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]); 77 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 78 Tcontrol_t miss_ifetch = PORT_READ(in_DECOD_MISS_IFETCH [i]); 79 Tcontrol_t miss_decod = PORT_READ(in_DECOD_MISS_DECOD [i]); 78 80 79 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"DECOD[%d] - Accepted",i); 80 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 81 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss : %d",miss); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 82 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context); 83 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_ifetch : %d",miss_ifetch); 84 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_decod : %d",miss_decod); 85 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt : %d",reg_NB_ELT[context]); 83 86 84 87 // Test if miss ifetch 85 88 // miss ifetch = decod a branch and the predict unit have not predict this branch ... gloup :P 86 if (miss )89 if (miss_ifetch or miss_decod) 87 90 { 88 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;91 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 89 92 Tdepth_t top = reg_TOP [context]; 90 93 … … 127 130 } 128 131 } 132 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; // rewrite 129 133 130 134 reg_TOP [context] = (depth+1)%_param->_size_queue [context]; … … 135 139 { 136 140 // Normal case : branch is previous predicated, change state of branch 137 Tdepth_t depth = (_param->_have_port_ depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;141 Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0; 138 142 139 143 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_WAITEND; … … 148 152 { 149 153 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0; 150 Tdepth_t depth = (_param->_have_port_ depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0;154 Tdepth_t depth = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH [i]):0; 151 155 152 156 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"BRANCH_COMPLETE[%d] - Accepted",i); … … 158 162 { 159 163 // Miss case 160 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_ KO;164 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; 161 165 162 166 // Another prediction (prediction with depth higer) … … 231 235 232 236 // =================================================================== 237 // =====[ BRANCH_EVENT ]============================================== 238 // =================================================================== 239 for (uint32_t i=0; i<_param->_nb_context; i++) 240 if (internal_BRANCH_EVENT_VAL [i] and PORT_READ(in_BRANCH_EVENT_ACK [i])) 241 { 242 Tdepth_t depth = internal_BRANCH_EVENT_DEPTH [i]; 243 244 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_KO; 245 } 246 247 // =================================================================== 233 248 // =====[ GARBAGE COLLECTOR ]========================================= 234 249 // =================================================================== … … 253 268 } 254 269 255 //#if (DEBUG >= DEBUG_TRACE)270 #if (DEBUG >= DEBUG_TRACE) 256 271 log_printf(TRACE,Update_Prediction_Table,FUNCTION,"Dump Update_Prediction_Table"); 257 272 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPDATE_PRIORITY : %d",reg_UPDATE_PRIORITY); 258 273 for (uint32_t i=0; i<_param->_nb_context; i++) 259 274 { 260 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i);275 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * Update_Prediction_Table [%d]",i); 261 276 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_TOP : %d",reg_TOP [i]); 262 277 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_BOTTOM : %d",reg_BOTTOM [i]); … … 266 281 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %s %x",j,toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str(),reg_UPDATE_PREDICTION_TABLE [i][j]._address_src); 267 282 } 268 //#endif283 #endif 269 284 270 285 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h
r81 r82 11 11 #include "Common/include/Debug.h" 12 12 #include "Behavioural/include/Parameters.h" 13 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Parameters.h" 14 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Parameters.h" 15 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Parameters.h" 16 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h" 17 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h" 13 18 14 19 namespace morpheo { … … 23 28 { 24 29 //-----[ fields ]------------------------------------------------------------ 30 public : uint32_t _nb_context ; 31 public : uint32_t _nb_decod_unit ; 32 public : uint32_t _size_address ; 33 public : uint32_t * _nb_instruction ;//[nb_context] 34 public : uint32_t * _nb_inst_decod ;//[nb_decod_unit] 35 public : uint32_t _nb_inst_branch_predict ; 36 public : uint32_t _nb_inst_branch_decod ; 37 public : uint32_t _nb_inst_branch_update ; 38 public : uint32_t _nb_inst_branch_complete ; 39 public : uint32_t _btb_size_queue ; 40 public : uint32_t _btb_associativity ; 41 public : uint32_t _btb_size_counter ; 42 public : Tvictim_t _btb_victim_scheme ; 43 public : Tpredictor_t _dir_predictor_scheme ; 44 public : bool _dir_have_bht [3]; 45 public : uint32_t _dir_bht_size_shifter [3]; 46 public : uint32_t _dir_bht_nb_shifter [3]; 47 public : bool _dir_have_pht [3]; 48 public : uint32_t _dir_pht_size_counter [3]; 49 public : uint32_t _dir_pht_nb_counter [3]; 50 public : uint32_t _dir_pht_size_address_share [3]; 51 public : uint32_t * _ras_size_queue ;//[nb_context] 52 public : uint32_t * _upt_size_queue ;//[nb_context] 53 54 public : uint32_t _size_context_id ; 55 public : uint32_t * _size_depth ;//[nb_context] 56 public : uint32_t _max_size_depth ; 57 public : uint32_t * _size_inst_ifetch_ptr ;//[nb_context] 58 public : uint32_t _size_history ; 59 public : uint32_t * _size_ras_index ;//[nb_context] 60 61 public : bool _have_port_context_id ; 62 public : bool _have_port_max_depth ; 63 public : bool * _have_port_depth ;//[nb_context] 64 public : bool * _have_port_inst_ifetch_ptr ;//[nb_context] 65 public : bool _have_port_history ; 66 public : bool * _have_port_ras_index ;//[nb_context] 67 68 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer ::Parameters * _param_btb; 69 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction ::Parameters * _param_dir; 70 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack ::Parameters * _param_ras; 71 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters * _param_upt; 72 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue ::Parameters * _param_glue; 25 73 26 74 //-----[ methods ]----------------------------------------------------------- 27 public : Parameters (); 75 public : Parameters (uint32_t nb_context , 76 uint32_t nb_decod_unit , 77 uint32_t size_address , 78 uint32_t * nb_instruction ,//[nb_context] 79 uint32_t * nb_inst_decod ,//[nb_decod_unit] 80 uint32_t nb_inst_branch_predict , 81 uint32_t nb_inst_branch_decod , 82 uint32_t nb_inst_branch_update , 83 uint32_t nb_inst_branch_complete , 84 uint32_t btb_size_queue , 85 uint32_t btb_associativity , 86 uint32_t btb_size_counter , 87 Tvictim_t btb_victim_scheme , 88 Tpredictor_t dir_predictor_scheme , 89 bool dir_have_bht [3], 90 uint32_t dir_bht_size_shifter [3], 91 uint32_t dir_bht_nb_shifter [3], 92 bool dir_have_pht [3], 93 uint32_t dir_pht_size_counter [3], 94 uint32_t dir_pht_nb_counter [3], 95 uint32_t dir_pht_size_address_share [3], 96 uint32_t * ras_size_queue ,//[nb_context] 97 uint32_t * upt_size_queue //[nb_context] 98 ); 28 99 // public : Parameters (Parameters & param) ; 29 100 public : ~Parameters () ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h
r81 r82 27 27 #endif 28 28 #include "Behavioural/include/Usage.h" 29 30 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h" 31 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h" 32 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h" 33 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h" 34 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h" 29 35 30 36 namespace morpheo { … … 61 67 public : SC_IN (Tcontrol_t) * in_NRESET ; 62 68 69 // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 70 public : SC_IN (Tcontrol_t ) ** in_PREDICT_VAL ; //[nb_context] 71 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_ACK ; //[nb_context] 72 public : SC_IN (Taddress_t ) ** in_PREDICT_PC_PREVIOUS ; //[nb_context] 73 public : SC_IN (Taddress_t ) ** in_PREDICT_PC_CURRENT ; //[nb_context] 74 public : SC_IN (Tcontrol_t ) ** in_PREDICT_PC_CURRENT_IS_DS_TAKE ; //[nb_context] 75 public : SC_OUT(Taddress_t ) ** out_PREDICT_PC_NEXT ; //[nb_context] 76 public : SC_OUT(Tcontrol_t ) ** out_PREDICT_PC_NEXT_IS_DS_TAKE ; //[nb_context] 77 public : SC_OUT(Tcontrol_t ) *** out_PREDICT_INSTRUCTION_ENABLE ; //[nb_context][nb_instruction] 78 public : SC_OUT(Tinst_ifetch_ptr_t ) ** out_PREDICT_INST_IFETCH_PTR ; //[nb_context] 79 public : SC_OUT(Tbranch_state_t ) ** out_PREDICT_BRANCH_STATE ; //[nb_context] 80 public : SC_OUT(Tprediction_ptr_t ) ** out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ; //[nb_context] 81 82 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 83 public : SC_IN (Tcontrol_t ) *** in_DECOD_VAL ; //[nb_decod_unit][nb_inst_decod] 84 public : SC_OUT(Tcontrol_t ) *** out_DECOD_ACK ; //[nb_decod_unit][nb_inst_decod] 85 public : SC_IN (Tcontext_t ) *** in_DECOD_CONTEXT_ID ; //[nb_decod_unit][nb_inst_decod] 86 public : SC_IN (Tcontrol_t ) *** in_DECOD_MATCH_INST_IFETCH_PTR ; //[nb_decod_unit][nb_inst_decod] 87 public : SC_IN (Tbranch_state_t ) *** in_DECOD_BRANCH_STATE ; //[nb_decod_unit][nb_inst_decod] 88 public : SC_IN (Tprediction_ptr_t ) *** in_DECOD_BRANCH_UPDATE_PREDICTION_ID ; //[nb_decod_unit][nb_inst_decod] 89 public : SC_IN (Tbranch_condition_t) *** in_DECOD_BRANCH_CONDITION ; //[nb_decod_unit][nb_inst_decod] 90 public : SC_IN (Tcontrol_t ) *** in_DECOD_BRANCH_DIRECTION ; //[nb_decod_unit][nb_inst_decod] 91 public : SC_IN (Taddress_t ) *** in_DECOD_ADDRESS_SRC ; //[nb_decod_unit][nb_inst_decod] 92 public : SC_IN (Taddress_t ) *** in_DECOD_ADDRESS_DEST ; //[nb_decod_unit][nb_inst_decod] 93 94 // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 95 public : SC_IN (Tcontrol_t ) ** in_BRANCH_COMPLETE_VAL ; //[nb_inst_branch_complete] 96 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_COMPLETE_ACK ; //[nb_inst_branch_complete] 97 public : SC_IN (Tcontext_t ) ** in_BRANCH_COMPLETE_CONTEXT_ID ; //[nb_inst_branch_complete] 98 public : SC_IN (Tdepth_t ) ** in_BRANCH_COMPLETE_DEPTH ; //[nb_inst_branch_complete] 99 public : SC_IN (Taddress_t ) ** in_BRANCH_COMPLETE_ADDRESS ; //[nb_inst_branch_complete] 100 public : SC_IN (Tcontrol_t ) ** in_BRANCH_COMPLETE_FLAG ; //[nb_inst_branch_complete] 101 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_COMPLETE_MISS_PREDICTION ; //[nb_inst_branch_complete] 102 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_COMPLETE_TAKE ; //[nb_inst_branch_complete] 103 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_SRC ; //[nb_inst_branch_complete] 104 public : SC_OUT(Taddress_t ) ** out_BRANCH_COMPLETE_ADDRESS_DEST ; //[nb_inst_branch_complete] 105 106 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 107 public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_VAL ; //[nb_context] 108 public : SC_IN (Tcontrol_t ) ** in_BRANCH_EVENT_ACK ; //[nb_context] 109 //public : SC_OUT(Tcontext_t ) ** out_BRANCH_EVENT_CONTEXT_ID ; //[nb_context] 110 //public : SC_OUT(Tdepth_t ) ** out_BRANCH_EVENT_DEPTH ; //[nb_context] 111 //public : SC_OUT(Tcontrol_t ) ** out_BRANCH_EVENT_MISS_PREDICTION ; //[nb_context] 112 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_SRC ; //[nb_context] 113 public : SC_OUT(Taddress_t ) ** out_BRANCH_EVENT_ADDRESS_DEST ; //[nb_context] 114 115 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 public : SC_OUT(Tdepth_t ) ** out_DEPTH_NB_BRANCH ; //[nb_context] 117 public : SC_OUT(Tdepth_t ) ** out_DEPTH_TAIL ; //[nb_context] 118 63 119 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 120 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer ::Branch_Target_Buffer * _component_btb; 121 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction ::Direction * _component_dir; 122 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack ::Return_Address_Stack * _component_ras; 123 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Update_Prediction_Table * _component_upt; 124 public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue ::Prediction_unit_Glue * _component_glue; 64 125 65 126 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 84 145 #endif 85 146 Parameters * param, 86 morpheo::behavioural::Tusage_t usage =USE_ALL147 morpheo::behavioural::Tusage_t usage 87 148 ); 88 149 public : ~Prediction_unit (void); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters.cpp
r81 r82 7 7 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h" 9 #include "Common/include/Max.h" 9 10 10 11 namespace morpheo { … … 18 19 #undef FUNCTION 19 20 #define FUNCTION "Prediction_unit::Parameters" 20 Parameters::Parameters () 21 Parameters::Parameters (uint32_t nb_context , 22 uint32_t nb_decod_unit , 23 uint32_t size_address , 24 uint32_t * nb_instruction ,//[nb_context] 25 uint32_t * nb_inst_decod ,//[nb_decod_unit] 26 uint32_t nb_inst_branch_predict , 27 uint32_t nb_inst_branch_decod , 28 uint32_t nb_inst_branch_update , 29 uint32_t nb_inst_branch_complete , 30 uint32_t btb_size_queue , 31 uint32_t btb_associativity , 32 uint32_t btb_size_counter , 33 Tvictim_t btb_victim_scheme , 34 Tpredictor_t dir_predictor_scheme , 35 bool dir_have_bht [3], 36 uint32_t dir_bht_size_shifter [3], 37 uint32_t dir_bht_nb_shifter [3], 38 bool dir_have_pht [3], 39 uint32_t dir_pht_size_counter [3], 40 uint32_t dir_pht_nb_counter [3], 41 uint32_t dir_pht_size_address_share [3], 42 uint32_t * ras_size_queue ,//[nb_context] 43 uint32_t * upt_size_queue //[nb_context] 44 ) 21 45 { 22 46 log_printf(FUNC,Prediction_unit,FUNCTION,"Begin"); 47 48 _nb_context = nb_context ; 49 _nb_decod_unit = nb_decod_unit ; 50 _size_address = size_address ; 51 _nb_instruction = nb_instruction ; 52 _nb_inst_decod = nb_inst_decod ; 53 _nb_inst_branch_predict = nb_inst_branch_predict ; 54 _nb_inst_branch_decod = nb_inst_branch_decod ; 55 _nb_inst_branch_update = nb_inst_branch_update ; 56 _nb_inst_branch_complete = nb_inst_branch_complete ; 57 _btb_size_queue = btb_size_queue ; 58 _btb_associativity = btb_associativity ; 59 _btb_size_counter = btb_size_counter ; 60 _btb_victim_scheme = btb_victim_scheme ; 61 _dir_predictor_scheme = dir_predictor_scheme ; 62 for (uint32_t i=0; i<3; i++) 63 { 64 _dir_have_bht [i] = dir_have_bht [i]; 65 _dir_bht_size_shifter [i] = dir_bht_size_shifter [i]; 66 _dir_bht_nb_shifter [i] = dir_bht_nb_shifter [i]; 67 _dir_have_pht [i] = dir_have_pht [i]; 68 _dir_pht_size_counter [i] = dir_pht_size_counter [i]; 69 _dir_pht_nb_counter [i] = dir_pht_nb_counter [i]; 70 _dir_pht_size_address_share [i] = dir_pht_size_address_share [i]; 71 } 72 _ras_size_queue = ras_size_queue ; 73 _upt_size_queue = upt_size_queue ; 74 75 _size_context_id = log2(_nb_context); 76 // public : uint32_t * _size_inst_ifetch_ptr ;//[nb_context] 77 78 _size_depth = new uint32_t [_nb_context]; 79 _size_ras_index = new uint32_t [_nb_context]; 80 for (uint32_t i=0; i<_nb_context; i++) 81 { 82 _size_depth [i] = log2(_upt_size_queue [i]); 83 _size_ras_index [i] = log2(_ras_size_queue [i]); 84 } 85 86 _max_size_depth = max<uint32_t>(_size_depth,_nb_context); 87 _have_port_context_id = (_size_context_id > 0); 88 _have_port_max_depth = (_max_size_depth > 0); 89 // public : bool * _have_port_inst_ifetch_ptr ;//[nb_context] 90 91 _param_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue ::Parameters 92 (_nb_context , 93 _nb_decod_unit , 94 _size_address , 95 _nb_instruction , 96 _size_depth , 97 _nb_inst_decod , 98 _nb_inst_branch_predict, 99 _nb_inst_branch_decod , 100 _nb_inst_branch_update ); 101 102 _size_inst_ifetch_ptr = _param_glue->_size_inst_ifetch_ptr ; 103 _have_port_depth = _param_glue->_have_port_depth; 104 _have_port_inst_ifetch_ptr = _param_glue->_have_port_inst_ifetch_ptr; 105 _have_port_history = (_size_history > 0); 106 107 _param_btb = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer ::Parameters 108 (_nb_context , 109 _nb_instruction , 110 _btb_size_queue , 111 _btb_associativity , 112 _size_address , 113 _btb_size_counter , 114 _nb_inst_branch_predict, 115 _nb_inst_branch_decod , 116 _nb_inst_branch_update , 117 _btb_victim_scheme ); 118 119 _param_dir = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction ::Parameters 120 (_dir_predictor_scheme , 121 _nb_inst_branch_predict , 122 _nb_inst_branch_update , 123 _size_address , 124 _dir_have_bht , 125 _dir_bht_size_shifter , 126 _dir_bht_nb_shifter , 127 _dir_have_pht , 128 _dir_pht_size_counter , 129 _dir_pht_nb_counter , 130 _dir_pht_size_address_share); 131 132 _size_history = _param_dir->_size_history; 133 134 _param_ras = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack ::Parameters 135 (_nb_context , 136 _ras_size_queue , 137 _size_address , 138 _nb_inst_branch_predict, 139 _nb_inst_branch_decod , 140 _nb_inst_branch_update ); 141 142 _param_upt = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters 143 (_nb_context , 144 _upt_size_queue , 145 _size_address , 146 _nb_inst_branch_predict , 147 _nb_inst_branch_decod , 148 _nb_inst_branch_complete, 149 _nb_inst_branch_update , 150 _size_history , 151 _size_ras_index ); 152 23 153 test(); 24 154 log_printf(FUNC,Prediction_unit,FUNCTION,"End"); … … 39 169 { 40 170 log_printf(FUNC,Prediction_unit,FUNCTION,"Begin"); 171 172 delete _param_btb; 173 delete _param_dir; 174 delete _param_ras; 175 delete _param_upt; 176 delete _param_glue; 177 178 delete [] _size_depth ; 179 delete [] _size_ras_index; 180 41 181 log_printf(FUNC,Prediction_unit,FUNCTION,"End"); 42 182 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters_print.cpp
r81 r82 26 26 27 27 xml.balise_open("prediction_unit"); 28 // xml.singleton_begin(""); xml.attribut("value",toString(_)); xml.singleton_end(); 28 xml.singleton_begin("nb_context "); xml.attribut("value",toString(_nb_context )); xml.singleton_end(); 29 xml.singleton_begin("nb_decod_unit "); xml.attribut("value",toString(_nb_decod_unit )); xml.singleton_end(); 30 xml.singleton_begin("size_address "); xml.attribut("value",toString(_size_address )); xml.singleton_end(); 31 xml.singleton_begin("nb_inst_branch_predict "); xml.attribut("value",toString(_nb_inst_branch_predict )); xml.singleton_end(); 32 xml.singleton_begin("nb_inst_branch_decod "); xml.attribut("value",toString(_nb_inst_branch_decod )); xml.singleton_end(); 33 xml.singleton_begin("nb_inst_branch_update "); xml.attribut("value",toString(_nb_inst_branch_update )); xml.singleton_end(); 34 xml.singleton_begin("nb_inst_branch_complete "); xml.attribut("value",toString(_nb_inst_branch_complete )); xml.singleton_end(); 35 xml.singleton_begin("btb_size_queue "); xml.attribut("value",toString(_btb_size_queue )); xml.singleton_end(); 36 xml.singleton_begin("btb_associativity "); xml.attribut("value",toString(_btb_associativity )); xml.singleton_end(); 37 xml.singleton_begin("btb_size_counter "); xml.attribut("value",toString(_btb_size_counter )); xml.singleton_end(); 38 xml.singleton_begin("btb_victim_scheme "); xml.attribut("value",toString(_btb_victim_scheme )); xml.singleton_end(); 39 xml.singleton_begin("dir_predictor_scheme "); xml.attribut("value",toString(_dir_predictor_scheme )); xml.singleton_end(); 40 xml.comment("predictor_scheme : "); 41 xml.comment(" * predictor_never_take : don't use \"predictor_{0,1,2}\" parameters."); 42 xml.comment(" * predictor_always_take : don't use \"predictor_{0,1,2}\" parameters."); 43 xml.comment(" * predictor_static : don't use \"predictor_{0,1,2}\" parameters."); 44 xml.comment(" * predictor_last_take : don't use \"predictor_{0,1,2}\" parameters."); 45 xml.comment(" * predictor_counter : use \"predictor_0\" parameters."); 46 xml.comment(" * predictor_local : use \"predictor_0\" parameters."); 47 xml.comment(" * predictor_global : use \"predictor_0\" parameters."); 48 xml.comment(" * predictor_meta : use \"predictor_{0,1,2}\" parameters."); 49 xml.comment(" * predictor_custom : use \"predictor_{0,1,2}\" parameters."); 50 for (uint32_t i=0; i<3; i++) 51 { 52 xml.singleton_begin("dir_predictor_"+toString(i)+"_have_bht "); xml.attribut("value",toString(_dir_have_bht [i])); xml.singleton_end(); 53 xml.singleton_begin("dir_predictor_"+toString(i)+"_bht_size_shifter "); xml.attribut("value",toString(_dir_bht_size_shifter [i])); xml.singleton_end(); 54 xml.singleton_begin("dir_predictor_"+toString(i)+"_bht_nb_shifter "); xml.attribut("value",toString(_dir_bht_nb_shifter [i])); xml.singleton_end(); 55 xml.singleton_begin("dir_predictor_"+toString(i)+"_have_pht "); xml.attribut("value",toString(_dir_have_pht [i])); xml.singleton_end(); 56 xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_size_counter "); xml.attribut("value",toString(_dir_pht_size_counter [i])); xml.singleton_end(); 57 xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_nb_counter "); xml.attribut("value",toString(_dir_pht_nb_counter [i])); xml.singleton_end(); 58 xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_size_address_share"); xml.attribut("value",toString(_dir_pht_size_address_share [i])); xml.singleton_end(); 59 } 60 61 for (uint32_t i=0;i<_nb_context; i++) 62 { 63 xml. balise_open_begin("component"); 64 xml. attribut("type","context"); 65 xml. attribut("id" ,toString(i)); 66 xml. balise_open_end(); 67 xml. singleton_begin("nb_instruction "); xml.attribut("value",toString(_nb_instruction [i])); xml.singleton_end(); 68 xml. singleton_begin("ras_size_queue "); xml.attribut("value",toString(_ras_size_queue [i])); xml.singleton_end(); 69 xml. singleton_begin("upt_size_queue "); xml.attribut("value",toString(_upt_size_queue [i])); xml.singleton_end(); 70 xml. balise_close(); 71 } 72 73 for (uint32_t i=0;i<_nb_decod_unit; i++) 74 { 75 xml. balise_open_begin("component"); 76 xml. attribut("type","decod_unit"); 77 xml. attribut("id" ,toString(i)); 78 xml. balise_open_end(); 79 xml. singleton_begin("nb_inst_decod "); xml.attribut("value",toString(_nb_inst_decod [i])); xml.singleton_end(); 80 xml. balise_close(); 81 } 82 83 29 84 xml.balise_close(); 30 85 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp
r81 r82 15 15 namespace front_end { 16 16 namespace prediction_unit { 17 18 19 17 20 18 #undef FUNCTION … … 54 52 in_NRESET = interface->set_signal_in <Tcontrol_t> ("nreset",1, RESET_VHDL_YES); 55 53 } 54 55 // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 56 { 57 { 58 ALLOC1_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context); 59 60 ALLOC1_VALACK_IN ( in_PREDICT_VAL ,VAL); 61 ALLOC1_VALACK_OUT(out_PREDICT_ACK ,ACK); 62 ALLOC1_SIGNAL_IN ( in_PREDICT_PC_PREVIOUS ,"pc_previous" ,Taddress_t ,_param->_size_address); 63 ALLOC1_SIGNAL_IN ( in_PREDICT_PC_CURRENT ,"pc_current" ,Taddress_t ,_param->_size_address); 64 ALLOC1_SIGNAL_IN ( in_PREDICT_PC_CURRENT_IS_DS_TAKE ,"pc_current_is_ds_take" ,Tcontrol_t ,1); 65 ALLOC1_SIGNAL_OUT(out_PREDICT_PC_NEXT ,"pc_next" ,Taddress_t ,_param->_size_address); 66 ALLOC1_SIGNAL_OUT(out_PREDICT_PC_NEXT_IS_DS_TAKE ,"pc_next_is_ds_take" ,Tcontrol_t ,1); 67 ALLOC1_SIGNAL_OUT(out_PREDICT_INST_IFETCH_PTR ,"inst_ifetch_ptr" ,Tinst_ifetch_ptr_t ,_param->_size_inst_ifetch_ptr [alloc_signal_it1]); 68 ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_STATE ,"branch_state" ,Tbranch_state_t ,_param->_size_branch_state); 69 ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t ,_param->_size_depth [alloc_signal_it1]); 70 } 71 { 72 ALLOC2_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context,_param->_nb_instruction[alloc_interface_it1]); 73 _ALLOC2_SIGNAL_OUT(out_PREDICT_INSTRUCTION_ENABLE ,"instruction_enable" ,Tcontrol_t ,1,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]); 74 } 75 } 76 77 // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 78 { 79 { 80 ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_interface_it1]); 81 82 _ALLOC2_VALACK_IN ( in_DECOD_VAL ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 83 _ALLOC2_VALACK_OUT(out_DECOD_ACK ,ACK,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 84 _ALLOC2_SIGNAL_IN ( in_DECOD_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 85 _ALLOC2_SIGNAL_IN ( in_DECOD_MATCH_INST_IFETCH_PTR ,"match_inst_ifetch_ptr" ,Tcontrol_t ,1 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 86 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_STATE ,"branch_state" ,Tbranch_state_t ,_param->_size_branch_state ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 87 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t ,_param->_max_size_depth ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 88 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_CONDITION ,"branch_condition" ,Tbranch_condition_t,_param->_size_branch_condition,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 89 _ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_DIRECTION ,"branch_direction" ,Tcontrol_t ,1 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 90 _ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_SRC ,"address_src" ,Taddress_t ,_param->_size_address ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 91 _ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST ,"address_dest" ,Taddress_t ,_param->_size_address ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]); 92 } 93 } 94 95 // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 96 { 97 ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete); 98 99 ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL ,VAL); 100 ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK ,ACK); 101 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 102 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 103 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS ,"address" ,Taddress_t,_param->_size_address); 104 ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG ,"flag" ,Tcontrol_t,1); 105 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 106 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_TAKE ,"take" ,Tcontrol_t,1); 107 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 108 ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 109 } 110 111 // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 112 { 113 ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context); 114 115 ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL ,VAL); 116 ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK ,ACK); 117 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID ,"context_id" ,Tcontext_t,_param->_size_context_id); 118 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH ,"depth" ,Tdepth_t ,_param->_max_size_depth); 119 // ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1); 120 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC ,"address_src" ,Taddress_t,_param->_size_address); 121 ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST ,"address_dest" ,Taddress_t,_param->_size_address); 122 } 123 124 // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 125 { 126 ALLOC1_INTERFACE("depth",OUT,SOUTH,"Interface with depth",_param->_nb_context); 127 128 ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH ,"nb_branch" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]+1); 129 ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL ,"tail" ,Tdepth_t,_param->_size_depth[alloc_signal_it1]); 130 } 131 132 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 133 std::string name; 134 135 { 136 name = _name+"_branch_target_buffer"; 137 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 138 139 _component_btb = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::Branch_Target_Buffer 140 (name.c_str() 141 #ifdef STATISTICS 142 ,param_statistics 143 #endif 144 ,_param->_param_btb 145 ,_usage); 146 147 _component->set_component (_component_btb->_component 148 #ifdef POSITION 149 , 50, 50, 10, 10 150 #endif 151 ); 152 } 153 154 { 155 name = _name+"_direction"; 156 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 157 158 _component_dir = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::Direction 159 (name.c_str() 160 #ifdef STATISTICS 161 ,param_statistics 162 #endif 163 ,_param->_param_dir 164 ,_usage); 165 166 _component->set_component (_component_dir->_component 167 #ifdef POSITION 168 , 50, 50, 10, 10 169 #endif 170 ); 171 } 56 172 57 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 173 { 174 name = _name+"_return_address_stack"; 175 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 176 177 _component_ras = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack::Return_Address_Stack 178 (name.c_str() 179 #ifdef STATISTICS 180 ,param_statistics 181 #endif 182 ,_param->_param_ras 183 ,_usage); 184 185 _component->set_component (_component_ras->_component 186 #ifdef POSITION 187 , 50, 50, 10, 10 188 #endif 189 ); 190 } 191 192 { 193 name = _name+"_update_prediction_table"; 194 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 195 196 _component_upt = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Update_Prediction_Table 197 (name.c_str() 198 #ifdef STATISTICS 199 ,param_statistics 200 #endif 201 ,_param->_param_upt 202 ,_usage); 203 204 _component->set_component (_component_upt->_component 205 #ifdef POSITION 206 , 50, 50, 10, 10 207 #endif 208 ); 209 } 210 211 { 212 name = _name+"_prediction_unit_glue"; 213 log_printf(INFO,Prediction_unit,FUNCTION,_("Create : %s"),name.c_str()); 214 215 _component_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Prediction_unit_Glue 216 (name.c_str() 217 #ifdef STATISTICS 218 ,param_statistics 219 #endif 220 ,_param->_param_glue 221 ,_usage); 222 223 _component->set_component (_component_glue->_component 224 #ifdef POSITION 225 , 50, 50, 10, 10 226 #endif 227 ); 228 } 58 229 59 230 // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 231 std::string src,dest; 61 232 233 // =================================================================== 234 // =====[ branch_target_buffer ]====================================== 235 // =================================================================== 236 { 237 src = _name+"_branch_target_buffer"; 238 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 239 240 { 241 dest = _name; 242 #ifdef POSITION 243 _component->interface_map (src ,"", 244 dest,""); 245 #endif 246 PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK"); 247 PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET"); 248 } 249 250 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 251 { 252 dest = _name+"_prediction_unit_glue"; 253 #ifdef POSITION 254 _component->interface_map (src ,"predict_"+toString(i), 255 dest,"predict_btb_"+toString(i)); 256 #endif 257 258 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_VAL" , 259 dest,"out_PREDICT_BTB_"+toString(i)+"_VAL" ); 260 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ACK" , 261 dest, "in_PREDICT_BTB_"+toString(i)+"_ACK" ); 262 if (_param->_have_port_context_id) 263 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_CONTEXT_ID" , 264 dest,"out_PREDICT_BTB_"+toString(i)+"_CONTEXT_ID" ); 265 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_ADDRESS" , 266 dest,"out_PREDICT_BTB_"+toString(i)+"_ADDRESS" ); 267 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_HIT" , 268 dest, "in_PREDICT_BTB_"+toString(i)+"_HIT" ); 269 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ADDRESS_SRC" , 270 dest, "in_PREDICT_BTB_"+toString(i)+"_ADDRESS_SRC" ); 271 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ADDRESS_DEST", 272 dest, "in_PREDICT_BTB_"+toString(i)+"_ADDRESS_DEST"); 273 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_CONDITION" , 274 dest, "in_PREDICT_BTB_"+toString(i)+"_CONDITION" ); 275 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_IS_ACCURATE" , 276 dest, "in_PREDICT_BTB_"+toString(i)+"_IS_ACCURATE" ); 277 278 dest = _name+"_direction"; 279 COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_LAST_TAKE" , 280 dest, "in_PREDICT_"+toString(i)+"_LAST_TAKE" ); 281 } 282 283 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 284 { 285 dest = _name+"_prediction_unit_glue"; 286 #ifdef POSITION 287 _component->interface_map (src ,"decod_"+toString(i), 288 dest,"decod_btb_"+toString(i)); 289 #endif 290 291 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_VAL" , 292 dest,"out_DECOD_BTB_"+toString(i)+"_VAL" ); 293 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_ACK" , 294 dest, "in_DECOD_BTB_"+toString(i)+"_ACK" ); 295 if (_param->_have_port_context_id) 296 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_CONTEXT_ID" , 297 dest,"out_DECOD_BTB_"+toString(i)+"_CONTEXT_ID" ); 298 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_ADDRESS_SRC" , 299 dest,"out_DECOD_BTB_"+toString(i)+"_ADDRESS_SRC" ); 300 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_ADDRESS_DEST" , 301 dest,"out_DECOD_BTB_"+toString(i)+"_ADDRESS_DEST" ); 302 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_CONDITION" , 303 dest,"out_DECOD_BTB_"+toString(i)+"_CONDITION" ); 304 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_LAST_TAKE" , 305 dest,"out_DECOD_BTB_"+toString(i)+"_LAST_TAKE" ); 306 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_MISS_PREDICTION", 307 dest,"out_DECOD_BTB_"+toString(i)+"_MISS_PREDICTION"); 308 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_IS_ACCURATE" , 309 dest,"out_DECOD_BTB_"+toString(i)+"_IS_ACCURATE" ); 310 } 311 312 for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 313 { 314 dest = _name+"_prediction_unit_glue"; 315 316 COMPONENT_MAP(_component,src , "in_UPDATE_" +toString(i)+"_VAL", 317 dest,"out_UPDATE_BTB_"+toString(i)+"_VAL"); 318 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_ACK", 319 dest, "in_UPDATE_BTB_"+toString(i)+"_ACK"); 320 321 dest = _name+"_update_prediction_table"; 322 #ifdef POSITION 323 _component->interface_map (src ,"update_"+toString(i), 324 dest,"update_"+toString(i)); 325 #endif 326 327 if (_param->_have_port_context_id) 328 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_CONTEXT_ID" , 329 dest,"out_UPDATE_"+toString(i)+ "_CONTEXT_ID" ); 330 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_ADDRESS_SRC" , 331 dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_SRC" ); 332 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_ADDRESS_DEST" , 333 dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_DEST" ); 334 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_CONDITION" , 335 dest,"out_UPDATE_"+toString(i)+"_BTB_CONDITION" ); 336 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_LAST_TAKE" , 337 dest,"out_UPDATE_"+toString(i)+ "_DIRECTION_GOOD" ); 338 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_MISS_PREDICTION", 339 dest,"out_UPDATE_"+toString(i)+ "_MISS_PREDICTION"); 340 } 341 } 342 343 // =================================================================== 344 // =====[ direction ]================================================= 345 // =================================================================== 346 { 347 src = _name+"_direction"; 348 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 349 350 { 351 dest = _name; 352 #ifdef POSITION 353 _component->interface_map (src ,"", 354 dest,""); 355 #endif 356 PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK"); 357 PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET"); 358 } 359 360 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 361 { 362 dest = _name+"_prediction_unit_glue"; 363 #ifdef POSITION 364 _component->interface_map (src ,"predict_"+toString(i), 365 dest,"predict_dir_"+toString(i)); 366 #endif 367 368 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_VAL" , 369 dest,"out_PREDICT_DIR_"+toString(i)+"_VAL" ); 370 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ACK" , 371 dest, "in_PREDICT_DIR_"+toString(i)+"_ACK" ); 372 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_ADDRESS_SRC", 373 dest,"out_PREDICT_DIR_"+toString(i)+"_ADDRESS_SRC"); 374 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_STATIC" , 375 dest,"out_PREDICT_DIR_"+toString(i)+"_STATIC" ); 376 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_DIRECTION" , 377 dest, "in_PREDICT_DIR_"+toString(i)+"_DIRECTION" ); 378 379 dest = _name+"_update_prediction_table"; 380 if (_param->_have_port_history) 381 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_HISTORY" , 382 dest, "in_PREDICT_" +toString(i)+"_HISTORY" ); 383 //out_PREDICT_DIR_LAST_TAKE - component_map branch_target_buffer 384 } 385 386 for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 387 { 388 dest = _name+"_prediction_unit_glue"; 389 390 COMPONENT_MAP(_component,src , "in_UPDATE_" +toString(i)+"_VAL", 391 dest,"out_UPDATE_DIR_"+toString(i)+"_VAL"); 392 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_ACK", 393 dest, "in_UPDATE_DIR_"+toString(i)+"_ACK"); 394 395 dest = _name+"_update_prediction_table"; 396 #ifdef POSITION 397 _component->interface_map (src ,"update_"+toString(i), 398 dest,"update_"+toString(i)); 399 #endif 400 401 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_ADDRESS" , 402 dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_SRC"); 403 if (_param->_have_port_history) 404 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_HISTORY" , 405 dest,"out_UPDATE_"+toString(i)+"_DIR_HISTORY" ); 406 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_DIRECTION", 407 dest,"out_UPDATE_"+toString(i)+ "_DIRECTION_GOOD"); 408 409 } 410 } 411 412 // =================================================================== 413 // =====[ return_address_stack ]====================================== 414 // =================================================================== 415 { 416 src = _name+"_return_address_stack"; 417 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 418 419 420 { 421 dest = _name; 422 #ifdef POSITION 423 _component->interface_map (src ,"", 424 dest,""); 425 #endif 426 PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK"); 427 PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET"); 428 } 429 430 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 431 { 432 dest = _name+"_prediction_unit_glue"; 433 #ifdef POSITION 434 _component->interface_map (src ,"predict_"+toString(i), 435 dest,"predict_dir_"+toString(i)); 436 #endif 437 438 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_VAL" , 439 dest,"out_PREDICT_RAS_"+toString(i)+"_VAL" ); 440 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ACK" , 441 dest, "in_PREDICT_RAS_"+toString(i)+"_ACK" ); 442 if (_param->_have_port_context_id) 443 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_CONTEXT_ID" , 444 dest,"out_PREDICT_RAS_"+toString(i)+"_CONTEXT_ID" ); 445 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_HIT" , 446 dest, "in_PREDICT_RAS_"+toString(i)+"_HIT" ); 447 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_PUSH" , 448 dest,"out_PREDICT_RAS_"+toString(i)+"_PUSH" ); 449 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_ADDRESS_PUSH", 450 dest,"out_PREDICT_RAS_"+toString(i)+"_ADDRESS_PUSH"); 451 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ADDRESS_POP" , 452 dest, "in_PREDICT_RAS_"+toString(i)+"_ADDRESS_POP" ); 453 454 dest = _name+"_update_prediction_table"; 455 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_INDEX", 456 dest, "in_PREDICT_" +toString(i)+"_RAS_INDEX"); 457 } 458 459 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 460 { 461 dest = _name+"_prediction_unit_glue"; 462 #ifdef POSITION 463 _component->interface_map (src ,"decod_"+toString(i), 464 dest,"decod_ras_"+toString(i)); 465 #endif 466 467 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_VAL" , 468 dest,"out_DECOD_RAS_"+toString(i)+"_VAL" ); 469 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_ACK" , 470 dest, "in_DECOD_RAS_"+toString(i)+"_ACK" ); 471 if (_param->_have_port_context_id) 472 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_CONTEXT_ID" , 473 dest,"out_DECOD_RAS_"+toString(i)+"_CONTEXT_ID" ); 474 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_HIT" , 475 dest, "in_DECOD_RAS_"+toString(i)+"_HIT" ); 476 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_PUSH" , 477 dest,"out_DECOD_RAS_"+toString(i)+"_PUSH" ); 478 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_ADDRESS_PUSH" , 479 dest,"out_DECOD_RAS_"+toString(i)+"_ADDRESS_PUSH" ); 480 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_ADDRESS_POP" , 481 dest, "in_DECOD_RAS_"+toString(i)+"_ADDRESS_POP" ); 482 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_MISS_PREDICTION", 483 dest,"out_DECOD_RAS_"+toString(i)+"_MISS_PREDICTION"); 484 485 dest = _name+"_update_prediction_table"; 486 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_INDEX" , 487 dest, "in_DECOD_" +toString(i)+"_RAS_INDEX" ); 488 } 489 490 for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 491 { 492 dest = _name+"_prediction_unit_glue"; 493 494 COMPONENT_MAP(_component,src , "in_UPDATE_" +toString(i)+"_VAL", 495 dest,"out_UPDATE_RAS_"+toString(i)+"_VAL"); 496 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_ACK", 497 dest, "in_UPDATE_RAS_"+toString(i)+"_ACK"); 498 499 dest = _name+"_update_prediction_table"; 500 #ifdef POSITION 501 _component->interface_map (src ,"update_"+toString(i), 502 dest,"update_"+toString(i)); 503 #endif 504 505 if (_param->_have_port_context_id) 506 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_CONTEXT_ID" , 507 dest,"out_UPDATE_"+toString(i)+ "_CONTEXT_ID" ); 508 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_PUSH" , 509 dest,"out_UPDATE_"+toString(i)+"_RAS_PUSH" ); 510 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_ADDRESS" , 511 dest,"out_UPDATE_"+toString(i)+"_RAS_ADDRESS" ); 512 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_INDEX" , 513 dest,"out_UPDATE_"+toString(i)+"_RAS_INDEX" ); 514 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_MISS_PREDICTION" , 515 dest,"out_UPDATE_"+toString(i)+ "_MISS_PREDICTION" ); 516 COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+ "_PREDICTION_IFETCH", 517 dest,"out_UPDATE_"+toString(i)+"_RAS_PREDICTION_IFETCH"); 518 } 519 } 520 521 // =================================================================== 522 // =====[ update_prediction_table ]=================================== 523 // =================================================================== 524 { 525 src = _name+"_update_prediction_table"; 526 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 527 528 { 529 dest = _name; 530 #ifdef POSITION 531 _component->interface_map (src ,"", 532 dest,""); 533 #endif 534 PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK"); 535 PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET"); 536 } 537 538 for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++) 539 { 540 dest = _name+"_prediction_unit_glue"; 541 #ifdef POSITION 542 _component->interface_map (src ,"predict_"+toString(i), 543 dest,"predict_dir_"+toString(i)); 544 #endif 545 546 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_VAL" , 547 dest,"out_PREDICT_UPT_"+toString(i)+"_VAL" ); 548 COMPONENT_MAP(_component,src ,"out_PREDICT_" +toString(i)+"_ACK" , 549 dest, "in_PREDICT_UPT_"+toString(i)+"_ACK" ); 550 if (_param->_have_port_context_id) 551 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_CONTEXT_ID" , 552 dest,"out_PREDICT_UPT_"+toString(i)+"_CONTEXT_ID" ); 553 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_BTB_ADDRESS_SRC" , 554 dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_ADDRESS_SRC" ); 555 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_BTB_ADDRESS_DEST", 556 dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_ADDRESS_DEST"); 557 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_BTB_CONDITION" , 558 dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_CONDITION" ); 559 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_BTB_LAST_TAKE" , 560 dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_LAST_TAKE" ); 561 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_BTB_IS_ACCURATE" , 562 dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_IS_ACCURATE" ); 563 COMPONENT_MAP(_component,src , "in_PREDICT_" +toString(i)+"_RAS_ADDRESS" , 564 dest,"out_PREDICT_UPT_"+toString(i)+"_RAS_ADDRESS" ); 565 566 //out_PREDICT_HISTORY - component_map direction 567 // in_PREDICT_RAS_INDEX - component_map return_address_stack 568 } 569 570 for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++) 571 { 572 dest = _name+"_prediction_unit_glue"; 573 574 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_VAL" , 575 dest,"out_DECOD_UPT_"+toString(i)+"_VAL" ); 576 COMPONENT_MAP(_component,src ,"out_DECOD_" +toString(i)+"_ACK" , 577 dest, "in_DECOD_UPT_"+toString(i)+"_ACK" ); 578 if (_param->_have_port_context_id) 579 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_CONTEXT_ID" , 580 dest,"out_DECOD_UPT_"+toString(i)+"_CONTEXT_ID" ); 581 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_BTB_ADDRESS_SRC" , 582 dest,"out_DECOD_UPT_"+toString(i)+"_BTB_ADDRESS_SRC" ); 583 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_BTB_ADDRESS_DEST" , 584 dest,"out_DECOD_UPT_"+toString(i)+"_BTB_ADDRESS_DEST" ); 585 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_BTB_CONDITION" , 586 dest,"out_DECOD_UPT_"+toString(i)+"_BTB_CONDITION" ); 587 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_BTB_LAST_TAKE" , 588 dest,"out_DECOD_UPT_"+toString(i)+"_BTB_LAST_TAKE" ); 589 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_RAS_ADDRESS" , 590 dest,"out_DECOD_UPT_"+toString(i)+"_RAS_ADDRESS" ); 591 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_MISS_IFETCH" , 592 dest,"out_DECOD_UPT_"+toString(i)+"_MISS_IFETCH" ); 593 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_MISS_DECOD" , 594 dest,"out_DECOD_UPT_"+toString(i)+"_MISS_DECOD" ); 595 if (_param->_have_port_max_depth) 596 COMPONENT_MAP(_component,src , "in_DECOD_" +toString(i)+"_UPDATE_PREDICTION_ID", 597 dest,"out_DECOD_UPT_"+toString(i)+"_UPDATE_PREDICTION_ID"); 598 599 //out_DECOD_UPT_RAS_INDEX - component_map return_address_stack 600 } 601 602 for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++) 603 { 604 dest = _name+"_prediction_unit_glue"; 605 606 #ifdef POSITION 607 _component->interface_map (src ,"update_"+toString(i), 608 dest,"update_upt_"+toString(i)); 609 #endif 610 611 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_VAL", 612 dest, "in_UPDATE_UPT_"+toString(i)+"_VAL"); 613 COMPONENT_MAP(_component,src , "in_UPDATE_" +toString(i)+"_ACK", 614 dest,"out_UPDATE_UPT_"+toString(i)+"_ACK"); 615 616 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_BTB_VAL", 617 dest, "in_UPDATE_UPT_"+toString(i)+"_BTB_VAL"); 618 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_DIR_VAL", 619 dest, "in_UPDATE_UPT_"+toString(i)+"_DIR_VAL"); 620 COMPONENT_MAP(_component,src ,"out_UPDATE_" +toString(i)+"_RAS_VAL", 621 dest, "in_UPDATE_UPT_"+toString(i)+"_RAS_VAL"); 622 623 //in_UPDATE_UPT_CONTEXT_ID - component_map branch_target_buffer 624 //in_UPDATE_UPT_MISS_PREDICTION - component_map branch_target_buffer 625 //in_UPDATE_UPT_DIRECTION_GOOD - component_map branch_target_buffer 626 //in_UPDATE_UPT_BTB_ADDRESS_SRC - component_map branch_target_buffer 627 //in_UPDATE_UPT_BTB_ADDRESS_DEST - component_map branch_target_buffer 628 //in_UPDATE_UPT_BTB_CONDITION - component_map branch_target_buffer 629 //in_UPDATE_UPT_DIR_HISTORY - component_map direction 630 //in_UPDATE_UPT_RAS_ADDRESS - component_map return_address_stack 631 //in_UPDATE_UPT_RAS_PUSH - component_map return_address_stack 632 //in_UPDATE_UPT_RAS_INDEX - component_map return_address_stack 633 //in_UPDATE_UPT_RAS_PREDICTION_IFETCH - component_map return_address_stack 634 } 635 636 for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++) 637 { 638 dest = _name; 639 640 #ifdef POSITION 641 _component->interface_map (src ,"complete_"+toString(i), 642 dest,"complete_"+toString(i)); 643 #endif 644 645 PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL" , 646 dest, "in_BRANCH_COMPLETE_"+toString(i)+"_VAL" ); 647 PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK" , 648 dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK" ); 649 if (_param->_have_port_context_id) 650 PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID" , 651 dest, "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID" ); 652 if (_param->_have_port_max_depth) 653 PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH" , 654 dest, "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH" ); 655 PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS" , 656 dest, "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS" ); 657 PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_FLAG" , 658 dest, "in_BRANCH_COMPLETE_"+toString(i)+"_FLAG" ); 659 PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION", 660 dest,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION"); 661 PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_TAKE" , 662 dest,"out_BRANCH_COMPLETE_"+toString(i)+"_TAKE" ); 663 PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC" , 664 dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC" ); 665 PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST" , 666 dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST" ); 667 } 668 669 for (uint32_t i=0; i<_param->_nb_context; i++) 670 { 671 dest = _name; 672 673 #ifdef POSITION 674 _component->interface_map (src ,"branch_event_"+toString(i), 675 dest,"branch_event_"+toString(i)); 676 #endif 677 678 PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_VAL" ,dest,"out_BRANCH_EVENT_"+toString(i)+"_VAL" ); 679 PORT_MAP(_component,src , "in_BRANCH_EVENT_"+toString(i)+"_ACK" ,dest, "in_BRANCH_EVENT_"+toString(i)+"_ACK" ); 680 PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC" ,dest,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC" ); 681 PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST",dest,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST"); 682 } 683 684 for (uint32_t i=0; i<_param->_nb_context; i++) 685 { 686 dest = _name+"_prediction_unit_glue"; 687 688 #ifdef POSITION 689 _component->interface_map (src ,"depth_"+toString(i), 690 dest,"depth_"+toString(i)); 691 #endif 692 693 COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+ "_NB_BRANCH", 694 dest, "in_DEPTH_"+toString(i)+"_UPT_NB_BRANCH"); 695 696 if (_param->_have_port_depth[i]) 697 COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+ "_TAIL" , 698 dest, "in_DEPTH_"+toString(i)+"_UPT_TAIL" ); 699 } 700 701 } 702 703 // =================================================================== 704 // =====[ prediction_unit_glue ]====================================== 705 // =================================================================== 706 { 707 src = _name+"_prediction_unit_glue"; 708 log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str()); 709 710 { 711 dest = _name; 712 #ifdef POSITION 713 _component->interface_map (src ,"", 714 dest,""); 715 #endif 716 717 PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK"); 718 PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET"); 719 } 720 721 for (uint32_t i=0; i<_param->_nb_context; i++) 722 { 723 dest = _name; 724 #ifdef POSITION 725 _component->interface_map (src ,"predict_"+toString(i), 726 dest,"predict_"+toString(i)); 727 #endif 728 729 PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_VAL" , 730 dest, "in_PREDICT_"+toString(i)+"_VAL" ); 731 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_ACK" , 732 dest,"out_PREDICT_"+toString(i)+"_ACK" ); 733 PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_PREVIOUS" , 734 dest, "in_PREDICT_"+toString(i)+"_PC_PREVIOUS" ); 735 PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_CURRENT" , 736 dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT" ); 737 PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_CURRENT_IS_DS_TAKE" , 738 dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT_IS_DS_TAKE" ); 739 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PC_NEXT" , 740 dest,"out_PREDICT_"+toString(i)+"_PC_NEXT" ); 741 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PC_NEXT_IS_DS_TAKE" , 742 dest,"out_PREDICT_"+toString(i)+"_PC_NEXT_IS_DS_TAKE" ); 743 if (_param->_have_port_inst_ifetch_ptr [i]) 744 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_INST_IFETCH_PTR" , 745 dest,"out_PREDICT_"+toString(i)+"_INST_IFETCH_PTR" ); 746 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_STATE" , 747 dest,"out_PREDICT_"+toString(i)+"_BRANCH_STATE" ); 748 if (_param->_have_port_depth [i]) 749 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID", 750 dest,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID"); 751 752 for (uint32_t j=0; j<_param->_nb_instruction[i]; j++) 753 { 754 dest = _name; 755 #ifdef POSITION 756 _component->interface_map (src ,"predict_"+toString(i)+"_"+toString(j), 757 dest,"predict_"+toString(i)+"_"+toString(j)); 758 #endif 759 760 PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_INSTRUCTION_ENABLE", 761 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_INSTRUCTION_ENABLE"); 762 } 763 } 764 765 for (uint32_t i=0; i<_param->_nb_decod_unit; i++) 766 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++) 767 { 768 dest = _name; 769 #ifdef POSITION 770 _component->interface_map (src ,"decod_"+toString(i), 771 dest,"decod_"+toString(i)); 772 #endif 773 774 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_VAL" , 775 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_VAL" ); 776 PORT_MAP(_component,src ,"out_DECOD_"+toString(i)+"_"+toString(j)+"_ACK" , 777 dest,"out_DECOD_"+toString(i)+"_"+toString(j)+"_ACK" ); 778 if (_param->_have_port_context_id) 779 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID" , 780 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID" ); 781 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_MATCH_INST_IFETCH_PTR" , 782 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_MATCH_INST_IFETCH_PTR" ); 783 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_STATE" , 784 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_STATE" ); 785 if (_param->_have_port_max_depth) 786 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_UPDATE_PREDICTION_ID", 787 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_UPDATE_PREDICTION_ID"); 788 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_CONDITION" , 789 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_CONDITION" ); 790 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_DIRECTION" , 791 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_DIRECTION" ); 792 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC" , 793 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC" ); 794 PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST" , 795 dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST" ); 796 } 797 798 for (uint32_t i=0; i<_param->_nb_context; i++) 799 { 800 dest = _name; 801 #ifdef POSITION 802 _component->interface_map (src ,"depth_"+toString(i), 803 dest,"depth_"+toString(i)); 804 #endif 805 806 PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_NB_BRANCH",dest,"out_DEPTH_"+toString(i)+"_NB_BRANCH"); 807 if (_param->_have_port_depth[i]) 808 PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_TAIL" ,dest,"out_DEPTH_"+toString(i)+"_TAIL" ); 809 } 810 } 62 811 63 812 // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 64 _component->test_map();813 _component->test_map(false); 65 814 66 815 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp
r81 r82 7 7 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h" 9 #include "Behavioural/include/Allocation.h" 9 10 10 11 namespace morpheo { … … 26 27 delete in_CLOCK ; 27 28 delete in_NRESET; 29 30 DELETE1_SIGNAL( in_PREDICT_VAL ,_param->_nb_context,1); 31 DELETE1_SIGNAL(out_PREDICT_ACK ,_param->_nb_context,1); 32 DELETE1_SIGNAL( in_PREDICT_PC_PREVIOUS ,_param->_nb_context,_param->_size_address); 33 DELETE1_SIGNAL( in_PREDICT_PC_CURRENT ,_param->_nb_context,_param->_size_address); 34 DELETE1_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE ,_param->_nb_context,1); 35 DELETE1_SIGNAL(out_PREDICT_PC_NEXT ,_param->_nb_context,_param->_size_address); 36 DELETE1_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE ,_param->_nb_context,1); 37 DELETE1_SIGNAL(out_PREDICT_INST_IFETCH_PTR ,_param->_nb_context,_param->_size_inst_ifetch_ptr [alloc_signal_it1]); 38 DELETE1_SIGNAL(out_PREDICT_BRANCH_STATE ,_param->_nb_context,_param->_size_branch_state); 39 DELETE1_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context,_param->_size_depth [alloc_signal_it1]); 40 41 DELETE2_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1],1); 42 DELETE2_SIGNAL( in_DECOD_VAL ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1); 43 DELETE2_SIGNAL(out_DECOD_ACK ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1); 44 DELETE2_SIGNAL( in_DECOD_CONTEXT_ID ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_context_id ); 45 DELETE2_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1 ); 46 DELETE2_SIGNAL( in_DECOD_BRANCH_STATE ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_state ); 47 DELETE2_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_max_size_depth ); 48 DELETE2_SIGNAL( in_DECOD_BRANCH_CONDITION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_condition); 49 DELETE2_SIGNAL( in_DECOD_BRANCH_DIRECTION ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1 ); 50 DELETE2_SIGNAL( in_DECOD_ADDRESS_SRC ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address ); 51 DELETE2_SIGNAL( in_DECOD_ADDRESS_DEST ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address ); 52 53 DELETE1_SIGNAL( in_BRANCH_COMPLETE_VAL ,_param->_nb_inst_branch_complete,1); 54 DELETE1_SIGNAL(out_BRANCH_COMPLETE_ACK ,_param->_nb_inst_branch_complete,1); 55 DELETE1_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID ,_param->_nb_inst_branch_complete,_param->_size_context_id); 56 DELETE1_SIGNAL( in_BRANCH_COMPLETE_DEPTH ,_param->_nb_inst_branch_complete,_param->_max_size_depth); 57 DELETE1_SIGNAL( in_BRANCH_COMPLETE_ADDRESS ,_param->_nb_inst_branch_complete,_param->_size_address); 58 DELETE1_SIGNAL( in_BRANCH_COMPLETE_FLAG ,_param->_nb_inst_branch_complete,1); 59 DELETE1_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete,1); 60 DELETE1_SIGNAL(out_BRANCH_COMPLETE_TAKE ,_param->_nb_inst_branch_complete,1); 61 DELETE1_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC ,_param->_nb_inst_branch_complete,_param->_size_address); 62 DELETE1_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST ,_param->_nb_inst_branch_complete,_param->_size_address); 63 64 DELETE1_SIGNAL(out_BRANCH_EVENT_VAL ,_param->_nb_context,1); 65 DELETE1_SIGNAL( in_BRANCH_EVENT_ACK ,_param->_nb_context,1); 66 // DELETE1_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID ,_param->_nb_context,_param->_size_context_id); 67 // DELETE1_SIGNAL(out_BRANCH_EVENT_DEPTH ,_param->_nb_context,_param->_max_size_depth); 68 // DELETE1_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context,1); 69 DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC ,_param->_nb_context,_param->_size_address); 70 DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST ,_param->_nb_context,_param->_size_address); 71 72 DELETE1_SIGNAL(out_DEPTH_NB_BRANCH ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1); 73 DELETE1_SIGNAL(out_DEPTH_TAIL ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]); 28 74 } 29 75 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 76 31 77 delete _component; 78 79 delete _component_btb; 80 delete _component_dir; 81 delete _component_ras; 82 delete _component_upt; 83 delete _component_glue; 32 84 33 85 log_printf(FUNC,Prediction_unit,FUNCTION,"End");
Note: See TracChangeset
for help on using the changeset viewer.