- Timestamp:
- Feb 27, 2009, 7:37:40 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine
- Files:
-
- 7 added
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h
r110 r111 31 31 32 32 #include <iostream> 33 #include <fstream> 33 34 34 35 namespace morpheo { … … 275 276 #endif 276 277 278 #if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true) 279 private : std::ofstream * instruction_log_file; 280 #endif 281 277 282 // -----[ Methods ]--------------------------------------------------- 278 283 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h
r108 r111 96 96 #endif 97 97 public : Taddress_t address_next ; 98 #ifdef DEBUG 99 public : double cycle_rob_in ; 100 public : double cycle_commit ; 101 #endif 98 102 99 // public : entry_t (uint32_t ptr ,100 // Tcontext_t front_end_id ,101 // Tcontext_t context_id ,102 // Tcontext_t rename_unit_id ,103 // Tdepth_t depth ,104 // Ttype_t type ,105 // Toperation_t operation ,106 // Tcontrol_t is_delay_slot ,107 // Tgeneral_data_t address ,108 // Texception_t exception ,109 // Texception_t exception_use ,110 // Tlsq_ptr_t store_queue_ptr_write ,111 // Tlsq_ptr_t load_queue_ptr_write ,112 // Tcontrol_t read_ra ,113 // Tgeneral_address_t num_reg_ra_log ,114 // Tgeneral_address_t num_reg_ra_phy ,115 // Tcontrol_t read_rb ,116 // Tgeneral_address_t num_reg_rb_log ,117 // Tgeneral_address_t num_reg_rb_phy ,118 // Tcontrol_t read_rc ,119 // Tspecial_address_t num_reg_rc_log ,120 // Tspecial_address_t num_reg_rc_phy ,121 // Tcontrol_t write_rd ,122 // Tgeneral_address_t num_reg_rd_log ,123 // Tgeneral_address_t num_reg_rd_phy_old ,124 // Tgeneral_address_t num_reg_rd_phy_new ,125 // Tcontrol_t write_re ,126 // Tspecial_address_t num_reg_re_log ,127 // Tspecial_address_t num_reg_re_phy_old ,128 // Tspecial_address_t num_reg_re_phy_new )129 // {130 // this->ptr = ptr ;131 // this->front_end_id = front_end_id ;132 // this->context_id = context_id ;133 // this->rename_unit_id = rename_unit_id ;134 // this->depth = depth ;135 // this->type = type ;136 // this->operation = operation ;137 // this->is_delay_slot = is_delay_slot ;138 // this->address = address ;139 // this->exception = exception ;140 // this->exception_use = exception_use ;141 // this->store_queue_ptr_write = store_queue_ptr_write ;142 // this->load_queue_ptr_write = load_queue_ptr_write ;143 // this->read_ra = read_ra ;144 // this->num_reg_ra_log = num_reg_ra_log ;145 // this->num_reg_ra_phy = num_reg_ra_phy ;146 // this->read_rb = read_rb ;147 // this->num_reg_rb_log = num_reg_rb_log ;148 // this->num_reg_rb_phy = num_reg_rb_phy ;149 // this->read_rc = read_rc ;150 // this->num_reg_rc_log = num_reg_rc_log ;151 // this->num_reg_rc_phy = num_reg_rc_phy ;152 // this->write_rd = write_rd ;153 // this->num_reg_rd_log = num_reg_rd_log ;154 // this->num_reg_rd_phy_old = num_reg_rd_phy_old ;155 // this->num_reg_rd_phy_new = num_reg_rd_phy_new ;156 // this->write_re = write_re ;157 // this->num_reg_re_log = num_reg_re_log ;158 // this->num_reg_re_phy_old = num_reg_re_phy_old ;159 // this->num_reg_re_phy_new = num_reg_re_phy_new ;160 // }161 103 }; 162 104 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp
r109 r111 310 310 #endif 311 311 312 #if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true) 313 instruction_log_file = new std::ofstream [_param->_nb_thread]; 314 for (uint32_t i=0; i<_param->_nb_thread; ++i) 315 if (_param->_have_thread [i]) 316 { 317 std::string filename = "Instruction_flow-thread_" + toString(i) + ".log"; 318 319 instruction_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc); 320 } 321 #endif 322 312 323 log_end(Commit_unit,FUNCTION); 313 324 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp
r109 r111 207 207 delete _component; 208 208 209 #if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true) 210 for (uint32_t i=0; i<_param->_nb_thread; ++i) 211 if (_param->_have_thread [i]) 212 { 213 instruction_log_file [i].close(); 214 } 215 #endif 216 209 217 log_end(Commit_unit,FUNCTION); 210 218 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_statistics_allocation.cpp
r110 r111 59 59 std::string sum_nb_inst_retire_ok = "0"; 60 60 std::string sum_nb_inst_retire_ko = "0"; 61 61 std::string sum_average; 62 62 for (uint32_t i=0; i<_param->_nb_thread; i++) 63 63 if (_param->_have_thread [i]) … … 68 68 sum_nb_inst_retire_ok = "+ nb_inst_retire_ok_"+toString(i) + " " +sum_nb_inst_retire_ok; 69 69 sum_nb_inst_retire_ko = "+ nb_inst_retire_ko_"+toString(i) + " " +sum_nb_inst_retire_ko; 70 sum_average = "+ average_inst_retire_ok_"+toString(i)+" average_inst_retire_ko_"+toString(i); 71 72 _stat->create_expr_average_by_cycle("average_inst_retire_ok_"+toString(i),"nb_inst_retire_ok_"+toString(i), "", toString(_("Average instruction retire ok by cycle (thread %d)"),i)); 73 _stat->create_expr_average_by_cycle("average_inst_retire_ko_"+toString(i),"nb_inst_retire_ko_"+toString(i), "", toString(_("Average instruction retire ko (event, miss) by cycle (thread %d)"),i)); 70 74 71 _stat->create_expr_ average_by_cycle("average_inst_retire_ok_"+toString(i), sum_nb_inst_retire_ok, "", toString(_("Average instruction retire ok by cycle (IPC)(thread %d)"),i));72 _stat->create_expr_ average_by_cycle("average_inst_retire_ko_"+toString(i), sum_nb_inst_retire_ko, "", toString(_("Average instruction retire ko (event, miss)by cycle (thread %d)"),i));73 75 _stat->create_expr_percent ("percent_inst_retire_ok_"+toString(i),"average_inst_retire_ok_"+toString(i), sum_average, toString(_("Percent instruction retire ok by cycle (thread %d)"),i)); 76 _stat->create_expr_percent ("percent_inst_retire_ko_"+toString(i),"average_inst_retire_ko_"+toString(i), sum_average, toString(_("Percent instruction retire ko by cycle (thread %d)"),i)); 77 74 78 _stat->create_expr ("IPC_ok_"+toString(i) , "average_inst_retire_ok_"+toString(i), TYPE_COUNTER, "inst/cycle", toString("Instruction Per Cycle (Instruction Ok) (thread %d)",i)); 75 79 _stat->create_expr ("CPI_ok_"+toString(i) , "/ 1 IPC_ok_"+toString(i) , TYPE_COUNTER, "cycle/inst", toString("Cycle Per Instruction (Instruction Ok) (thread %d)",i)); … … 82 86 } 83 87 88 _stat->create_expr_average_by_cycle("average_inst_retire_ok", sum_nb_inst_retire_ok, "", _("Average instruction retire ok by cycle (all thread)")); 89 _stat->create_expr_average_by_cycle("average_inst_retire_ko", sum_nb_inst_retire_ko, "", _("Average instruction retire ko (event, miss) by cycle (all thread)")); 90 91 sum_average = "+ average_inst_retire_ok average_inst_retire_ko"; 92 93 _stat->create_expr_percent ("percent_inst_retire_ok","average_inst_retire_ok", sum_average, _("Percent instruction retire ok by cycle (all thread)")); 94 _stat->create_expr_percent ("percent_inst_retire_ko","average_inst_retire_ko", sum_average, _("Percent instruction retire ko by cycle (all thread)")); 95 84 96 _stat->create_expr ("IPC_ok" , "/ "+sum_nb_inst_retire_ok+" cycle", TYPE_COUNTER, "inst/cycle", "Instruction Per Cycle (Instruction Ok)"); 85 97 _stat->create_expr ("CPI_ok" , "/ 1 IPC_ok" , TYPE_COUNTER, "cycle/inst", "Cycle Per Instruction (Instruction Ok)"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp
r110 r111 172 172 #endif 173 173 entry->address_next = PORT_READ(in_INSERT_ADDRESS_NEXT [x][y]); 174 #ifdef DEBUG 175 entry->cycle_rob_in = sc_simulation_time(); 176 entry->cycle_commit = sc_simulation_time(); 177 #endif 174 178 175 179 // Test if exception : … … 340 344 (entry->read_rb)) 341 345 entry->address_next = PORT_READ(in_COMMIT_ADDRESS [x]); 346 347 #ifdef DEBUG 348 entry->cycle_commit = sc_simulation_time(); 349 #endif 342 350 } 343 351 } … … 406 414 } 407 415 416 #if defined(DEBUG) and defined(DEBUG_Commit_unit) and (DEBUG_Commit_unit == true) 417 // log file 418 instruction_log_file [num_thread] 419 << "[" << sc_simulation_time() << "] " 420 << "{" << ((retire_ok)?" OK ":"!KO!") << "} " 421 << std::hex 422 << "0x" << entry->address << " (0x" << (entry->address<<2) << ") " 423 << std::dec 424 << "[" << entry->cycle_rob_in << ", " << entry->cycle_commit << "] " 425 << std::endl; 426 #endif 427 408 428 // Update nb_inst 409 429 reg_NB_INST_COMMIT_ALL [front_end_id][context_id] --; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_min.cfg
r88 r111 4 4 1 1 *2 # nb_rename_unit 5 5 1 1 *2 # size_queue 6 0 1 +1 # queue_scheme 6 7 1 1 *2 # nb_bank 7 8 0 0 *2 # size_packet -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_mono_rename_unit.cfg
r88 r111 4 4 1 1 *2 # nb_rename_unit 5 5 16 32 *2 # size_queue 6 0 1 +1 # queue_scheme 6 7 4 16 *2 # nb_bank 7 8 0 0 *2 # size_packet -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/config_multi_rename_unit.cfg
r88 r111 4 4 4 4 *2 # nb_rename_unit 5 5 64 64 *2 # size_queue 6 0 1 +1 # queue_scheme 6 7 4 16 *2 # nb_bank 7 8 0 0 *2 # size_packet -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/src/main.cpp
r88 r111 8 8 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/SelfTest/include/test.h" 9 9 10 #define NB_PARAMS 1 710 #define NB_PARAMS 18 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 (_(" * nb_front_end (uint32_t )\n")); 18 err (_(" * nb_rename_unit (uint32_t )\n")); 19 err (_(" * size_queue (uint32_t )\n")); 20 err (_(" * nb_bank (uint32_t )\n")); 21 err (_(" * size_packet (uint32_t )\n")); 22 err (_(" * size_general_data (uint32_t )\n")); 23 err (_(" * size_special_data (uint32_t )\n")); 24 err (_(" * size_general_register (uint32_t )\n")); 25 err (_(" * size_special_register (uint32_t )\n")); 26 err (_(" * size_store_queue_ptr (uint32_t )\n")); 27 err (_(" * size_load_queue_ptr (uint32_t )\n")); 28 err (_(" * nb_inst_issue (uint32_t )\n")); 29 err (_(" * nb_inst_rename [nb_rename_unit] (uint32_t )\n")); 30 err (_(" * nb_inst_reexecute (uint32_t )\n")); 31 err (_(" * nb_rename_unit_select (uint32_t )\n")); 32 err (_(" * priority (Tpriority_t )\n")); 33 err (_(" * load_balancing (Tload_balancing_t)\n")); 34 err (_(" * table_routing [nb_rename_unit][nb_inst_issue] (bool )\n")); 35 err (_(" * table_routing [nb_inst_issue][nb_type] (bool )\n")); 16 err (_(" * nb_context (uint32_t )\n")); 17 err (_(" * nb_front_end (uint32_t )\n")); 18 err (_(" * nb_rename_unit (uint32_t )\n")); 19 err (_(" * size_queue (uint32_t )\n")); 20 err (_(" * queue_scheme (Tissue_queue_scheme_t)\n")); 21 err (_(" * nb_bank (uint32_t )\n")); 22 err (_(" * size_packet (uint32_t )\n")); 23 err (_(" * size_general_data (uint32_t )\n")); 24 err (_(" * size_special_data (uint32_t )\n")); 25 err (_(" * size_general_register (uint32_t )\n")); 26 err (_(" * size_special_register (uint32_t )\n")); 27 err (_(" * size_store_queue_ptr (uint32_t )\n")); 28 err (_(" * size_load_queue_ptr (uint32_t )\n")); 29 err (_(" * nb_inst_issue (uint32_t )\n")); 30 err (_(" * nb_inst_rename [nb_rename_unit] (uint32_t )\n")); 31 err (_(" * nb_inst_reexecute (uint32_t )\n")); 32 err (_(" * nb_rename_unit_select (uint32_t )\n")); 33 err (_(" * priority (Tpriority_t )\n")); 34 err (_(" * load_balancing (Tload_balancing_t )\n")); 35 err (_(" * table_routing [nb_rename_unit][nb_inst_issue] (bool )\n")); 36 err (_(" * table_routing [nb_inst_issue][nb_type] (bool )\n")); 36 37 err (_(" * TYPE_ALU \n")); 37 38 err (_(" * TYPE_SHIFT \n")); … … 71 72 72 73 uint32_t _size_queue = fromString<uint32_t >(argv[x++]); 74 Tissue_queue_scheme_t _queue_scheme = fromString<Tissue_queue_scheme_t>(argv[x++]); 73 75 uint32_t _nb_bank = fromString<uint32_t >(argv[x++]); 74 76 uint32_t _size_packet = fromString<uint32_t >(argv[x++]); … … 126 128 _nb_rename_unit , 127 129 _size_queue , 130 _queue_scheme , 128 131 _nb_bank , 129 132 _size_packet , -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h
r110 r111 139 139 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 140 140 private : generic::priority::Priority * _priority_in ; 141 142 // in_order implementation only 143 // out_of_order implementation only 144 private : generic::priority::Priority * _priority_reg; 141 145 private : generic::priority::Priority * _priority_out; 142 private : generic::priority::Priority * _priority_reg;143 146 144 147 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 148 // common implementation 145 149 private : std::list<entry_t*> * _issue_queue; 146 150 private : std::list<entry_t*> _reexecute_queue; 151 152 // in_order implementation only 153 private : uint32_t reg_NUM_BANK_HEAD; 154 private : uint32_t reg_NUM_BANK_TAIL; 155 // out_of_order implementation only 147 156 148 157 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 149 private : Tcontrol_t * internal_BANK_IN_ACK ;//[nb_bank] 150 private : uint32_t * internal_BANK_IN_NUM_RENAME_UNIT ;//[nb_bank] 151 private : uint32_t * internal_BANK_IN_NUM_INST ;//[nb_bank] 152 158 // common implementation 153 159 private : Tcontrol_t * internal_ISSUE_OUT_VAL ;//[nb_inst_issue] 154 160 private : Tcontrol_t * internal_ISSUE_OUT_FROM_REEXECUTE ;//[nb_inst_issue] … … 157 163 158 164 private : Tcontrol_t * internal_REEXECUTE_ACK ;//[nb_inst_reexecute] 165 166 // in_order implementation only 167 private : Tcontrol_t * internal_BANK_IN_ACK ;//[nb_bank] 168 private : uint32_t * internal_BANK_IN_NUM_RENAME_UNIT ;//[nb_bank] 169 private : uint32_t * internal_BANK_IN_NUM_INST ;//[nb_bank] 170 // out_of_order implementation only 171 public : Tcontrol_t ** internal_ISSUE_IN_ACK ;//[nb_rename_unit][nb_inst_rename] 172 173 // function pointer 174 public : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_transition) (void); 175 public : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMoore ) (void); 176 public : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_in ) (void); 177 public : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_out) (void); 159 178 #endif 160 179 … … 189 208 190 209 #ifdef SYSTEMC 191 public : void transition (void); 192 public : void genMoore (void); 210 public : void transition (void); 211 public : void genMoore (void); 212 public : void genMealy_issue_in (void); 213 public : void genMealy_issue_out (void); 214 215 public : void function_in_order_transition (void); 216 public : void function_in_order_genMealy_issue_out(void); 217 public : void function_in_order_genMoore (void); 218 219 public : void function_out_of_order_transition (void); 220 public : void function_out_of_order_genMoore (void); 193 221 #endif 194 222 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Parameters.h
r110 r111 25 25 { 26 26 //-----[ fields ]------------------------------------------------------------ 27 public : uint32_t _nb_context ; 28 public : uint32_t _nb_front_end ; 29 public : uint32_t _nb_rename_unit ; 30 public : uint32_t _size_queue ; 31 public : uint32_t _nb_bank ; 32 //public : uint32_t _size_packet ; 33 //public : uint32_t _size_general_data ; 34 //public : uint32_t _size_special_data ; 35 //public : uint32_t _size_general_register ; 36 //public : uint32_t _size_special_register ; 37 //public : uint32_t _size_store_queue_ptr ; 38 //public : uint32_t _size_load_queue_ptr ; 39 public : uint32_t _nb_inst_issue ; 40 public : uint32_t * _nb_inst_rename ;//[nb_rename_unit] 41 public : uint32_t _nb_inst_reexecute ; 42 public : uint32_t _nb_rename_unit_select ; 43 public : Tpriority_t _priority ; 44 public : Tload_balancing_t _load_balancing ; 45 public : bool ** _table_routing ;//[nb_rename_unit][nb_inst_issue] 46 public : bool ** _table_issue_type ;//[nb_inst_issue][nb_type] 47 public : uint32_t _size_reexecute_queue ; 48 49 //public : uint32_t _nb_bank_select_out ; 50 public : uint32_t _max_nb_inst_rename ; 51 52 //public : uint32_t _size_context_id ; 53 //public : uint32_t _size_front_end_id ; 54 public : uint32_t _size_bank ; 55 56 //public : bool _have_port_context_id ; 57 //public : bool _have_port_front_end_id ; 58 //public : bool _have_port_packet_id ; 59 //public : bool _have_port_load_queue_ptr; 27 public : uint32_t _nb_context ; 28 public : uint32_t _nb_front_end ; 29 public : uint32_t _nb_rename_unit ; 30 public : uint32_t _size_queue ; 31 public : Tissue_queue_scheme_t _queue_scheme ; 32 public : uint32_t _nb_bank ; 33 //public : uint32_t _size_packet ; 34 //public : uint32_t _size_general_data ; 35 //public : uint32_t _size_special_data ; 36 //public : uint32_t _size_general_register ; 37 //public : uint32_t _size_special_register ; 38 //public : uint32_t _size_store_queue_ptr ; 39 //public : uint32_t _size_load_queue_ptr ; 40 public : uint32_t _nb_inst_issue ; 41 public : uint32_t * _nb_inst_rename ;//[nb_rename_unit] 42 public : uint32_t _nb_inst_reexecute ; 43 public : uint32_t _nb_rename_unit_select ; 44 public : Tpriority_t _priority ; 45 public : Tload_balancing_t _load_balancing ; 46 public : bool ** _table_routing ;//[nb_rename_unit][nb_inst_issue] 47 public : bool ** _table_issue_type ;//[nb_inst_issue][nb_type] 48 public : uint32_t _size_reexecute_queue ; 49 50 //public : uint32_t _nb_bank_select_out ; 51 public : uint32_t _max_nb_inst_rename ; 52 53 //public : uint32_t _size_context_id ; 54 //public : uint32_t _size_front_end_id ; 55 public : uint32_t _size_bank ; 56 57 //public : bool _have_port_context_id ; 58 //public : bool _have_port_front_end_id ; 59 //public : bool _have_port_packet_id ; 60 //public : bool _have_port_load_queue_ptr; 60 61 61 62 //-----[ methods ]----------------------------------------------------------- 62 public : Parameters (uint32_t nb_context , 63 uint32_t nb_front_end , 64 uint32_t nb_rename_unit , 65 uint32_t size_queue , 66 uint32_t nb_bank , 67 uint32_t size_packet , 68 uint32_t size_general_data , 69 uint32_t size_special_data , 70 uint32_t size_general_register , 71 uint32_t size_special_register , 72 uint32_t size_store_queue_ptr , 73 uint32_t size_load_queue_ptr , 74 uint32_t nb_inst_issue , 75 uint32_t * nb_inst_rename , 76 uint32_t nb_inst_reexecute , 77 uint32_t nb_rename_unit_select , 78 Tpriority_t priority , 79 Tload_balancing_t load_balancing , 80 bool ** table_routing , 81 bool ** table_issue_type , 82 bool is_toplevel=false); 63 public : Parameters (uint32_t nb_context , 64 uint32_t nb_front_end , 65 uint32_t nb_rename_unit , 66 uint32_t size_queue , 67 Tissue_queue_scheme_t queue_scheme , 68 uint32_t nb_bank , 69 uint32_t size_packet , 70 uint32_t size_general_data , 71 uint32_t size_special_data , 72 uint32_t size_general_register , 73 uint32_t size_special_register , 74 uint32_t size_store_queue_ptr , 75 uint32_t size_load_queue_ptr , 76 uint32_t nb_inst_issue , 77 uint32_t * nb_inst_rename , 78 uint32_t nb_inst_reexecute , 79 uint32_t nb_rename_unit_select , 80 Tpriority_t priority , 81 Tload_balancing_t load_balancing , 82 bool ** table_routing , 83 bool ** table_issue_type , 84 bool is_toplevel=false); 83 85 84 86 // public : Parameters (Parameters & param) ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Types.h
r88 r111 17 17 namespace ooo_engine { 18 18 namespace issue_queue { 19 20 typedef enum 21 { 22 ISSUE_QUEUE_SCHEME_IN_ORDER // Each instruction is issue in of order 23 // ,ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER // Each bundle is issue in order. In bundle, an instruction is issue out of order 24 ,ISSUE_QUEUE_SCHEME_OUT_OF_ORDER // Each instruction is issue out of order 25 } Tissue_queue_scheme_t; 19 26 20 27 class entry_t … … 87 94 }; // end namespace core 88 95 }; // end namespace behavioural 96 97 template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t& x) 98 { 99 switch (x) 100 { 101 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER : return "in_order" ; break; 102 // case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER : return "in_bundle_order"; break; 103 case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER : return "out_of_order" ; break; 104 default : return ""; break; 105 } 106 }; 107 108 template<> inline morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t fromString<morpheo::behavioural::core::multi_ooo_engine 109 ::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const std::string& x) 110 { 111 if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER))) == 0) or 112 (x.compare("in_order") == 0)) 113 return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER; 114 // if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER))) == 0) or 115 // (x.compare("in_bundle_order") == 0)) 116 // return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER; 117 if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER))) == 0) or 118 (x.compare("out_of_order") == 0)) 119 return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER; 120 121 throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\"")); 122 }; 123 89 124 }; // end namespace morpheo 90 125 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue.cpp
r110 r111 75 75 if (usage_is_set(_usage,USE_SYSTEMC)) 76 76 { 77 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - transition"),_name.c_str()); 77 // Function pointer 78 switch (_param->_queue_scheme) 79 { 80 case ISSUE_QUEUE_SCHEME_IN_ORDER : 81 { 82 function_transition = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_transition ; 83 function_genMoore = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_genMoore ; 84 function_genMealy_issue_in = NULL; 85 function_genMealy_issue_out = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_in_order_genMealy_issue_out; 86 87 break; 88 } 89 case ISSUE_QUEUE_SCHEME_OUT_OF_ORDER : 90 { 91 function_transition = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_out_of_order_transition ; 92 function_genMoore = &morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::function_out_of_order_genMoore ; 93 function_genMealy_issue_in = NULL; 94 function_genMealy_issue_out = NULL; 95 96 break; 97 } 98 default : 99 { 100 break; 101 } 102 } 78 103 79 SC_METHOD (transition); 80 dont_initialize (); 81 sensitive << (*(in_CLOCK)).pos(); 82 104 if (function_transition != NULL) 105 { 106 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - transition"),_name.c_str()); 107 108 SC_METHOD (transition); 109 dont_initialize (); 110 sensitive << (*(in_CLOCK)).pos(); 111 83 112 # ifdef SYSTEMCASS_SPECIFIC 84 113 // List dependency information 85 114 # endif 115 } 86 116 87 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str()); 117 if (function_genMoore != NULL) 118 { 119 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str()); 120 121 SC_METHOD (genMoore); 122 dont_initialize (); 123 sensitive << (*(in_CLOCK)).neg(); // need internal register 124 125 # ifdef SYSTEMCASS_SPECIFIC 126 // List dependency information 127 # endif 128 } 88 129 89 SC_METHOD (genMoore); 90 dont_initialize (); 91 sensitive << (*(in_CLOCK)).neg(); // need internal register 92 130 if (function_genMealy_issue_in != NULL) 131 { 132 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMealy_issue_in"),_name.c_str()); 133 134 SC_METHOD (genMealy_issue_in); 135 dont_initialize (); 136 sensitive << (*(in_CLOCK)).neg(); // need internal register 137 93 138 # ifdef SYSTEMCASS_SPECIFIC 94 139 // List dependency information 95 140 # endif 141 } 142 143 if (function_genMealy_issue_out != NULL) 144 { 145 log_printf(INFO,Issue_queue,FUNCTION,_("<%s> : Method - genMealy_issue_out"),_name.c_str()); 146 147 SC_METHOD (genMealy_issue_out); 148 dont_initialize (); 149 sensitive << (*(in_CLOCK)).neg(); // need internal register 150 151 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER) 152 { 153 for (uint32_t i=0; i<_param->_nb_inst_issue; ++i) 154 sensitive << (*(in_ISSUE_OUT_ACK [i])); 155 } 156 157 # ifdef SYSTEMCASS_SPECIFIC 158 // List dependency information 159 # endif 160 } 96 161 97 162 #endif -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_allocation.cpp
r110 r111 154 154 155 155 ALLOC1(internal_REEXECUTE_ACK ,Tcontrol_t,_param->_nb_inst_reexecute); 156 157 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER) 158 { 159 ALLOC1(internal_BANK_IN_ACK ,Tcontrol_t,_param->_nb_bank); 160 ALLOC1(internal_BANK_IN_NUM_RENAME_UNIT ,uint32_t ,_param->_nb_bank); 161 ALLOC1(internal_BANK_IN_NUM_INST ,uint32_t ,_param->_nb_bank); 162 } 163 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER) 164 { 165 ALLOC2(internal_ISSUE_IN_ACK ,Tcontrol_t,_param->_nb_rename_unit,_param->_nb_inst_rename[it1]); 166 } 156 167 } 157 168 158 169 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 159 160 170 _priority_in = new generic::priority::Priority (_name+"_priority_in" , 161 171 _param->_priority , … … 165 175 _param->_nb_rename_unit_select); 166 176 177 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER) 178 { 167 179 _priority_out = new generic::priority::Priority (_name+"_priority_out" , 168 180 _param->_priority , … … 174 186 _param->_nb_bank, 175 187 _param->_nb_bank); 188 } 176 189 177 190 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_deallocation.cpp
r110 r111 98 98 99 99 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 100 DELETE1(internal_BANK_IN_ACK ,_param->_nb_bank);101 DELETE1(internal_BANK_IN_NUM_RENAME_UNIT ,_param->_nb_bank);102 DELETE1(internal_BANK_IN_NUM_INST ,_param->_nb_bank);103 104 100 DELETE1(internal_ISSUE_OUT_VAL ,_param->_nb_inst_issue); 105 101 DELETE1(internal_ISSUE_OUT_FROM_REEXECUTE,_param->_nb_inst_issue); … … 108 104 109 105 DELETE1(internal_REEXECUTE_ACK ,_param->_nb_inst_reexecute); 106 107 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER) 108 { 109 DELETE1(internal_BANK_IN_ACK ,_param->_nb_bank); 110 DELETE1(internal_BANK_IN_NUM_RENAME_UNIT ,_param->_nb_bank); 111 DELETE1(internal_BANK_IN_NUM_INST ,_param->_nb_bank); 112 } 113 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_IN_ORDER) 114 { 115 DELETE2(internal_ISSUE_IN_ACK ,_param->_nb_rename_unit,_param->_nb_inst_rename[it1]); 116 } 110 117 } 111 118 … … 113 120 114 121 delete _priority_in ; 115 delete _priority_out; 116 delete _priority_reg; 122 if (_param->_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER) 123 { 124 delete _priority_out; 125 delete _priority_reg; 126 } 117 127 delete _component; 118 128 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_genMoore.cpp
r110 r111 39 39 } 40 40 41 // =================================================================== 42 // =====[ ISSUE_IN ]================================================== 43 // =================================================================== 44 { 45 Tcontrol_t ack [_param->_nb_rename_unit][_param->_max_nb_inst_rename]; 46 47 // Initialisation 48 for (uint32_t i=0; i<_param->_nb_bank; i++) 49 internal_BANK_IN_ACK [i] = false; 50 51 for (uint32_t i=0; i<_param->_nb_rename_unit; i++) 52 for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++) 53 ack [i][j] = false; 54 55 std::list<generic::priority::select_t> * select_reg = _priority_reg->select(); // same select for all issue 56 57 // issue_in interface 58 std::list<generic::priority::select_t> * select_in = _priority_in ->select(); // same select for all issue 59 for (std::list<generic::priority::select_t>::iterator it=select_in ->begin(); 60 it!=select_in ->end(); 61 it++) 62 { 63 // Get num interface 64 uint32_t num_rename_unit = it->grp; 65 uint32_t num_inst_rename = it->elt; 66 67 log_printf(TRACE,Issue_queue,FUNCTION," * ISSUE_IN [%d][%d]",num_rename_unit,num_inst_rename); 68 69 // scan all bank 70 for (std::list<generic::priority::select_t>::iterator it=select_reg->begin(); 71 it!=select_reg->end(); 72 it++) 73 { 74 uint32_t num_bank = it->grp; 75 76 log_printf(TRACE,Issue_queue,FUNCTION," * BANK [%d]",num_bank); 77 78 // test if bank is not busy (full or previous access) 79 if (not internal_BANK_IN_ACK [num_bank] and (_issue_queue[num_bank].size() < _param->_size_bank)) 80 { 81 log_printf(TRACE,Issue_queue,FUNCTION," * find"); 82 83 // find 84 ack [num_rename_unit][num_inst_rename] = true; 85 internal_BANK_IN_ACK [num_bank] = true; 86 internal_BANK_IN_NUM_RENAME_UNIT [num_bank] = num_rename_unit; 87 internal_BANK_IN_NUM_INST [num_bank] = num_inst_rename; 88 89 break; // Stop scan 90 } 91 else 92 log_printf(TRACE,Issue_queue,FUNCTION," * not find"); 93 } 94 } 95 96 for (uint32_t i=0; i<_param->_nb_rename_unit; i++) 97 for (uint32_t j=0; j<_param->_nb_inst_rename[i]; j++) 98 PORT_WRITE(out_ISSUE_IN_ACK [i][j],ack [i][j]); 99 } 100 101 // =================================================================== 102 // =====[ ISSUE_OUT ]================================================= 103 // =================================================================== 104 { 105 Tcontrol_t val [_param->_nb_inst_issue]; 106 107 for (uint32_t i=0; i<_param->_nb_inst_issue; i++) 108 val [i] = 0; 109 110 // From Reexecute_queue 111 112 // uint32_t num_reexecute_entry = 0; 113 for (std::list<entry_t*>::iterator it=_reexecute_queue.begin(); 114 it!=_reexecute_queue.end(); 115 ++it) 116 { 117 entry_t* entry = (*it); 118 119 for (uint32_t i=0; i<_param->_nb_inst_issue; i++) 120 // test if no previous transaction and can accept this type 121 if ((val[i] == 0) and _param->_table_issue_type [i][entry->_type]) 122 { 123 // find a issue port 124 val [i] = 1; 125 126 if (_param->_have_port_context_id) 127 PORT_WRITE(out_ISSUE_OUT_CONTEXT_ID [i], entry->_context_id ); 128 if (_param->_have_port_front_end_id) 129 PORT_WRITE(out_ISSUE_OUT_FRONT_END_ID [i], entry->_front_end_id ); 130 if (_param->_have_port_rob_ptr ) 131 PORT_WRITE(out_ISSUE_OUT_PACKET_ID [i], entry->_packet_id ); 132 PORT_WRITE(out_ISSUE_OUT_OPERATION [i], entry->_operation ); 133 PORT_WRITE(out_ISSUE_OUT_TYPE [i], entry->_type ); 134 PORT_WRITE(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE [i], entry->_store_queue_ptr_write); 135 if (_param->_have_port_load_queue_ptr) 136 PORT_WRITE(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE [i], entry->_load_queue_ptr_write ); 137 PORT_WRITE(out_ISSUE_OUT_HAS_IMMEDIAT [i], entry->_has_immediat ); 138 PORT_WRITE(out_ISSUE_OUT_IMMEDIAT [i], entry->_immediat ); 139 PORT_WRITE(out_ISSUE_OUT_READ_RA [i], entry->_read_ra ); 140 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RA [i], entry->_num_reg_ra ); 141 PORT_WRITE(out_ISSUE_OUT_READ_RB [i], entry->_read_rb ); 142 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RB [i], entry->_num_reg_rb ); 143 PORT_WRITE(out_ISSUE_OUT_READ_RC [i], entry->_read_rc ); 144 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RC [i], entry->_num_reg_rc ); 145 PORT_WRITE(out_ISSUE_OUT_WRITE_RD [i], entry->_write_rd ); 146 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RD [i], entry->_num_reg_rd ); 147 PORT_WRITE(out_ISSUE_OUT_WRITE_RE [i], entry->_write_re ); 148 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RE [i], entry->_num_reg_re ); 149 150 internal_ISSUE_OUT_FROM_REEXECUTE [i] = true; 151 // internal_ISSUE_OUT_NUM_BANK [i] = num_reexecute_entry; 152 internal_ISSUE_OUT_ENTRY [i] = entry; 153 154 break; // stop scan 155 } 156 // num_reexecute_entry ++; 157 } 158 159 // From Issue_queue 160 161 std::list<generic::priority::select_t> * select = _priority_out->select(); // same select for all issue 162 163 for (std::list<generic::priority::select_t>::iterator it=select->begin(); 164 it!=select->end(); 165 it++) 166 { 167 uint32_t num_bank=it->grp; 168 169 // log_printf(TRACE,Issue_queue,Issue_queue,FUNCTION," * Bank [%d]",num_bank); 170 171 // Have instruction ? 172 if (not _issue_queue [num_bank].empty()) 173 { 174 // log_printf(TRACE,Issue_queue,Issue_queue,FUNCTION," * Not Empty !!!"); 175 176 entry_t* entry = _issue_queue [num_bank].front(); 177 178 for (uint32_t i=0; i<_param->_nb_inst_issue; i++) 179 // test if no previous transaction and can accept this type 180 if ((val[i] == 0) and _param->_table_issue_type [i][entry->_type]) 181 { 182 // find a issue port 183 val [i] = 1; 184 185 if (_param->_have_port_context_id) 186 PORT_WRITE(out_ISSUE_OUT_CONTEXT_ID [i], entry->_context_id ); 187 if (_param->_have_port_front_end_id) 188 PORT_WRITE(out_ISSUE_OUT_FRONT_END_ID [i], entry->_front_end_id ); 189 if (_param->_have_port_rob_ptr ) 190 PORT_WRITE(out_ISSUE_OUT_PACKET_ID [i], entry->_packet_id ); 191 PORT_WRITE(out_ISSUE_OUT_OPERATION [i], entry->_operation ); 192 PORT_WRITE(out_ISSUE_OUT_TYPE [i], entry->_type ); 193 PORT_WRITE(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE [i], entry->_store_queue_ptr_write); 194 if (_param->_have_port_load_queue_ptr) 195 PORT_WRITE(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE [i], entry->_load_queue_ptr_write ); 196 PORT_WRITE(out_ISSUE_OUT_HAS_IMMEDIAT [i], entry->_has_immediat ); 197 PORT_WRITE(out_ISSUE_OUT_IMMEDIAT [i], entry->_immediat ); 198 PORT_WRITE(out_ISSUE_OUT_READ_RA [i], entry->_read_ra ); 199 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RA [i], entry->_num_reg_ra ); 200 PORT_WRITE(out_ISSUE_OUT_READ_RB [i], entry->_read_rb ); 201 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RB [i], entry->_num_reg_rb ); 202 PORT_WRITE(out_ISSUE_OUT_READ_RC [i], entry->_read_rc ); 203 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RC [i], entry->_num_reg_rc ); 204 PORT_WRITE(out_ISSUE_OUT_WRITE_RD [i], entry->_write_rd ); 205 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RD [i], entry->_num_reg_rd ); 206 PORT_WRITE(out_ISSUE_OUT_WRITE_RE [i], entry->_write_re ); 207 PORT_WRITE(out_ISSUE_OUT_NUM_REG_RE [i], entry->_num_reg_re ); 208 209 internal_ISSUE_OUT_FROM_REEXECUTE [i] = false; 210 internal_ISSUE_OUT_NUM_BANK [i] = num_bank; 211 internal_ISSUE_OUT_ENTRY [i] = entry; 212 213 break; // stop scan 214 } 215 } 216 } 217 218 for (uint32_t i=0; i<_param->_nb_inst_issue; i++) 219 { 220 internal_ISSUE_OUT_VAL [i] = val [i]; 221 PORT_WRITE(out_ISSUE_OUT_VAL [i], internal_ISSUE_OUT_VAL [i]); 222 } 223 } 41 (this->*function_genMoore) (); 224 42 225 43 log_end(Issue_queue,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_transition.cpp
r110 r111 27 27 { 28 28 _priority_in ->reset(); 29 _priority_out->reset();30 _priority_reg->reset();31 32 for (uint32_t i=0; i<_param->_nb_bank; i++)33 _issue_queue [i].clear();34 29 _reexecute_queue.clear(); 35 30 } … … 37 32 { 38 33 _priority_in ->transition(); 39 _priority_out->transition();40 _priority_reg->transition();41 42 // ===================================================================43 // =====[ ISSUE_IN ]==================================================44 // ===================================================================45 46 for (uint32_t i=0; i<_param->_nb_bank; i++)47 if (internal_BANK_IN_ACK [i])48 {49 uint32_t x = internal_BANK_IN_NUM_RENAME_UNIT [i];50 uint32_t y = internal_BANK_IN_NUM_INST [i];51 52 if (PORT_READ(in_ISSUE_IN_VAL[x][y]))53 {54 log_printf(TRACE,Issue_queue,FUNCTION," * ISSUE_IN [%d] - Transaction with ISSUE_IN [%d][%d]",i,x,y);55 56 #ifdef STATISTICS57 if (usage_is_set(_usage,USE_STATISTICS))58 (*_stat_nb_inst_issue_in [x]) ++;59 #endif60 entry_t * entry = new entry_t61 (62 (_param->_have_port_context_id )?PORT_READ(in_ISSUE_IN_CONTEXT_ID [x][y]):0,63 (_param->_have_port_front_end_id )?PORT_READ(in_ISSUE_IN_FRONT_END_ID [x][y]):0,64 (_param->_have_port_rob_ptr )?PORT_READ(in_ISSUE_IN_PACKET_ID [x][y]):0,65 PORT_READ(in_ISSUE_IN_OPERATION [x][y]),66 PORT_READ(in_ISSUE_IN_TYPE [x][y]),67 PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_WRITE [x][y]),68 (_param->_have_port_load_queue_ptr)?PORT_READ(in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE [x][y]):0,69 PORT_READ(in_ISSUE_IN_HAS_IMMEDIAT [x][y]),70 PORT_READ(in_ISSUE_IN_IMMEDIAT [x][y]),71 PORT_READ(in_ISSUE_IN_READ_RA [x][y]),72 PORT_READ(in_ISSUE_IN_NUM_REG_RA [x][y]),73 PORT_READ(in_ISSUE_IN_READ_RB [x][y]),74 PORT_READ(in_ISSUE_IN_NUM_REG_RB [x][y]),75 PORT_READ(in_ISSUE_IN_READ_RC [x][y]),76 PORT_READ(in_ISSUE_IN_NUM_REG_RC [x][y]),77 PORT_READ(in_ISSUE_IN_WRITE_RD [x][y]),78 PORT_READ(in_ISSUE_IN_NUM_REG_RD [x][y]),79 PORT_READ(in_ISSUE_IN_WRITE_RE [x][y]),80 PORT_READ(in_ISSUE_IN_NUM_REG_RE [x][y])81 );82 83 _issue_queue [i].push_back(entry);84 }85 }86 34 87 35 // =================================================================== … … 130 78 if (internal_ISSUE_OUT_VAL [i] and PORT_READ(in_ISSUE_OUT_ACK [i])) 131 79 { 132 entry_t * entry = internal_ISSUE_OUT_ENTRY [i]; 133 80 #ifdef STATISTICS 81 if (usage_is_set(_usage,USE_STATISTICS)) 82 (*_stat_nb_inst_issue_out ) ++; 83 #endif 134 84 if (internal_ISSUE_OUT_FROM_REEXECUTE [i]) 135 85 { 86 entry_t * entry = internal_ISSUE_OUT_ENTRY [i]; 87 136 88 log_printf(TRACE,Issue_queue,FUNCTION," * ISSUE_OUT [%d] - From Reexecute_queue",i); 137 89 138 90 _reexecute_queue.remove(entry); 91 92 delete entry; 139 93 } 140 else 141 { 142 // front ... 143 uint32_t num_bank = internal_ISSUE_OUT_NUM_BANK [i]; 144 145 log_printf(TRACE,Issue_queue,FUNCTION," * ISSUE_OUT [%d] - From issue_queue [%d]",i,num_bank); 146 147 _issue_queue [num_bank].remove(entry); 148 } 149 150 delete entry; 151 } 94 // else ... in function specific 95 } 152 96 } 153 97 154 #if defined(DEBUG) and defined(DEBUG_Issue_queue) and (DEBUG >= DEBUG_TRACE) 98 // specific implementation 99 (this->*function_transition) (); 100 101 // =================================================================== 102 // =====[ PRINT ]==================================================== 103 // =================================================================== 104 105 #if defined(DEBUG) and DEBUG_Issue_queue and (DEBUG >= DEBUG_TRACE) 155 106 log_printf(TRACE,Issue_queue,FUNCTION," * Dump Issue_queue"); 156 107 … … 245 196 #endif 246 197 198 199 247 200 #if defined(STATISTICS) or defined(VHDL_TESTBENCH) 248 201 end_cycle (); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Parameters.cpp
r110 r111 19 19 #undef FUNCTION 20 20 #define FUNCTION "Issue_queue::Parameters" 21 Parameters::Parameters (uint32_t nb_context , 22 uint32_t nb_front_end , 23 uint32_t nb_rename_unit , 24 uint32_t size_queue , 25 uint32_t nb_bank , 26 uint32_t size_packet , 27 uint32_t size_general_data , 28 uint32_t size_special_data , 29 uint32_t size_general_register , 30 uint32_t size_special_register , 31 uint32_t size_store_queue_ptr , 32 uint32_t size_load_queue_ptr , 33 uint32_t nb_inst_issue , 34 uint32_t * nb_inst_rename , 35 uint32_t nb_inst_reexecute , 36 uint32_t nb_rename_unit_select , 37 Tpriority_t priority , 38 Tload_balancing_t load_balancing , 39 bool ** table_routing , 40 bool ** table_issue_type , 41 bool is_toplevel ) 21 Parameters::Parameters (uint32_t nb_context , 22 uint32_t nb_front_end , 23 uint32_t nb_rename_unit , 24 uint32_t size_queue , 25 Tissue_queue_scheme_t queue_scheme , 26 uint32_t nb_bank , 27 uint32_t size_packet , 28 uint32_t size_general_data , 29 uint32_t size_special_data , 30 uint32_t size_general_register , 31 uint32_t size_special_register , 32 uint32_t size_store_queue_ptr , 33 uint32_t size_load_queue_ptr , 34 uint32_t nb_inst_issue , 35 uint32_t * nb_inst_rename , 36 uint32_t nb_inst_reexecute , 37 uint32_t nb_rename_unit_select , 38 Tpriority_t priority , 39 Tload_balancing_t load_balancing , 40 bool ** table_routing , 41 bool ** table_issue_type , 42 bool is_toplevel ) 42 43 { 43 44 log_begin(Issue_queue,FUNCTION); … … 47 48 _nb_rename_unit = nb_rename_unit ; 48 49 _size_queue = size_queue ; 50 _queue_scheme = queue_scheme ; 49 51 _nb_bank = nb_bank ; 50 52 _nb_inst_issue = nb_inst_issue ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Parameters_msg_error.cpp
r109 r111 25 25 26 26 Parameters_test test ("Issue_queue"); 27 28 switch (_queue_scheme) 29 { 30 case ISSUE_QUEUE_SCHEME_IN_ORDER : 31 case ISSUE_QUEUE_SCHEME_OUT_OF_ORDER : 32 { 33 // supported 34 break; 35 } 36 default : 37 { 38 test.error(toString(_("Issue queue scheme '%s' is not supported. Please wait a next revision.\n"),toString(_queue_scheme).c_str())); 39 break; 40 } 41 } 42 43 if (// (_queue_scheme == ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER) or 44 (_queue_scheme == ISSUE_QUEUE_SCHEME_OUT_OF_ORDER )) 45 test.warning(toString(_("Can have deadlock with the queue scheme \"%s\".\n"),toString(_queue_scheme).c_str())); 27 46 28 47 if (not is_multiple(_size_queue, _nb_bank)) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select.cpp
r108 r111 123 123 } 124 124 125 //for (uint32_t i=0; i<_param->_nb_front_end; i++)126 //for (uint32_t j=0; j<_param->_nb_context [i]; j++)127 //sensitive << (*(in_RETIRE_EVENT_STATE [i][j]));125 for (uint32_t i=0; i<_param->_nb_front_end; i++) 126 for (uint32_t j=0; j<_param->_nb_context [i]; j++) 127 sensitive << (*(in_RETIRE_EVENT_STATE [i][j])); 128 128 129 129 for (uint32_t i=0; i<_param->_nb_inst_rename; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_genMealy.cpp
r110 r111 69 69 70 70 Tcontrol_t no_execute = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y])); 71 Tcontrol_t read_ra = (PORT_READ(in_RENAME_IN_READ_RA [x][y]));72 Tcontrol_t read_rb = (PORT_READ(in_RENAME_IN_READ_RB [x][y]));73 Tcontrol_t read_rc = (PORT_READ(in_RENAME_IN_READ_RC [x][y]));74 Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]));75 Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]));71 // Tcontrol_t read_ra = (PORT_READ(in_RENAME_IN_READ_RA [x][y])); 72 // Tcontrol_t read_rb = (PORT_READ(in_RENAME_IN_READ_RB [x][y])); 73 // Tcontrol_t read_rc = (PORT_READ(in_RENAME_IN_READ_RC [x][y])); 74 // Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y])); 75 // Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y])); 76 76 77 // Attention, j'ai enlevé event_state de la liste de sensibilité 78 // Tevent_state_t event_state = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]); 77 // Test if ROB is Flushed 78 Tevent_state_t event_state = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]); 79 Tcontrol_t can_register_access = (event_state == EVENT_STATE_NO_EVENT); 79 80 80 // Tcontrol_t no_execute = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]) or 81 // // ROB Flush 82 // ((event_state == EVENT_STATE_EVENT ) or 83 // (event_state == EVENT_STATE_WAITEND))); 84 85 // Tcontrol_t read_ra = (PORT_READ(in_RENAME_IN_READ_RA [x][y]) and not no_execute); 86 // Tcontrol_t read_rb = (PORT_READ(in_RENAME_IN_READ_RB [x][y]) and not no_execute); 87 // Tcontrol_t read_rc = (PORT_READ(in_RENAME_IN_READ_RC [x][y]) and not no_execute); 88 // Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]) and not no_execute); 89 // Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]) and not no_execute); 81 Tcontrol_t read_ra = (PORT_READ(in_RENAME_IN_READ_RA [x][y]) and can_register_access); 82 Tcontrol_t read_rb = (PORT_READ(in_RENAME_IN_READ_RB [x][y]) and can_register_access); 83 Tcontrol_t read_rc = (PORT_READ(in_RENAME_IN_READ_RC [x][y]) and can_register_access); 84 Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]) and can_register_access); 85 Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]) and can_register_access); 90 86 91 87 if (_param->_have_port_front_end_id) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/configuration.cfg
r110 r111 23 23 1 1 +1 # commit_priority 24 24 1 1 +1 # commit_load_balancing 25 1 1 +1 # size_issue_queue 25 1 1 +1 # size_issue_queue 26 0 1 +1 # issue_queue_scheme 26 27 1 1 +1 # nb_issue_queue_bank 27 28 1 1 +1 # issue_priority -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/src/main.cpp
r110 r111 9 9 #include "Behavioural/include/Allocation.h" 10 10 11 #define NB_PARAMS 2 311 #define NB_PARAMS 24 12 12 13 13 void usage (int argc, char * argv[]) … … 15 15 err (_("<Usage> %s name_instance list_params.\n"),argv[0]); 16 16 err (_("list_params is :\n")); 17 err (_(" * nb_front_end (uint32_t )\n")); 18 err (_(" * nb_context [nb_front_end] (uint32_t )\n")); 19 err (_(" * nb_rename_unit (uint32_t )\n")); 20 err (_(" * nb_execute_loop (uint32_t )\n")); 21 err (_(" * nb_inst_decod [nb_front_end] (uint32_t )\n")); 22 err (_(" * nb_inst_insert [nb_rename_unit] (uint32_t )\n")); 23 err (_(" * nb_inst_retire [nb_rename_unit] (uint32_t )\n")); 24 err (_(" * nb_inst_issue (uint32_t )\n")); 25 err (_(" * nb_inst_execute [nb_execute_loop] (uint32_t )\n")); 26 err (_(" * nb_inst_reexecute (uint32_t )\n")); 27 err (_(" * nb_inst_commit (uint32_t )\n")); 28 err (_(" * nb_inst_branch_complete (uint32_t )\n")); 29 err (_(" * nb_branch_speculated [nb_front_end][nb_context] (uint32_t )\n")); 30 err (_(" * size_nb_inst_decod (uint32_t )\n")); 31 err (_(" * nb_rename_unit_select (uint32_t )\n")); 32 err (_(" * nb_execute_loop_select (uint32_t )\n")); 33 err (_(" * size_general_data (uint32_t )\n")); 34 err (_(" * size_special_data (uint32_t )\n")); 35 err (_(" * link_rename_unit_with_front_end [nb_front_end] (uint32_t )\n")); 36 err (_(" * size_re_order_buffer (uint32_t )\n")); 37 err (_(" * nb_re_order_buffer_bank (uint32_t )\n")); 38 err (_(" * commit_priority (Tpriority_t )\n")); 39 err (_(" * commit_load_balancing (Tload_balancing_t)\n")); 40 err (_(" * size_issue_queue (uint32_t )\n")); 41 err (_(" * nb_issue_queue_bank (uint32_t )\n")); 42 err (_(" * issue_priority (Tpriority_t )\n")); 43 err (_(" * issue_load_balancing (Tload_balancing_t)\n")); 44 err (_(" * table_routing [nb_rename_unit][nb_inst_issue] (bool )\n")); 45 err (_(" * table_issue_type [nb_inst_issue][nb_type] (bool )\n")); 17 err (_(" * nb_front_end (uint32_t )\n")); 18 err (_(" * nb_context [nb_front_end] (uint32_t )\n")); 19 err (_(" * nb_rename_unit (uint32_t )\n")); 20 err (_(" * nb_execute_loop (uint32_t )\n")); 21 err (_(" * nb_inst_decod [nb_front_end] (uint32_t )\n")); 22 err (_(" * nb_inst_insert [nb_rename_unit] (uint32_t )\n")); 23 err (_(" * nb_inst_retire [nb_rename_unit] (uint32_t )\n")); 24 err (_(" * nb_inst_issue (uint32_t )\n")); 25 err (_(" * nb_inst_execute [nb_execute_loop] (uint32_t )\n")); 26 err (_(" * nb_inst_reexecute (uint32_t )\n")); 27 err (_(" * nb_inst_commit (uint32_t )\n")); 28 err (_(" * nb_inst_branch_complete (uint32_t )\n")); 29 err (_(" * nb_branch_speculated [nb_front_end][nb_context] (uint32_t )\n")); 30 err (_(" * size_nb_inst_decod (uint32_t )\n")); 31 err (_(" * nb_rename_unit_select (uint32_t )\n")); 32 err (_(" * nb_execute_loop_select (uint32_t )\n")); 33 err (_(" * size_general_data (uint32_t )\n")); 34 err (_(" * size_special_data (uint32_t )\n")); 35 err (_(" * link_rename_unit_with_front_end [nb_front_end] (uint32_t )\n")); 36 err (_(" * size_re_order_buffer (uint32_t )\n")); 37 err (_(" * nb_re_order_buffer_bank (uint32_t )\n")); 38 err (_(" * commit_priority (Tpriority_t )\n")); 39 err (_(" * commit_load_balancing (Tload_balancing_t )\n")); 40 err (_(" * size_issue_queue (uint32_t )\n")); 41 err (_(" * issue_queue_scheme (Tissue_queue_scheme_t)\n")); 42 err (_(" * nb_issue_queue_bank (uint32_t )\n")); 43 err (_(" * issue_priority (Tpriority_t )\n")); 44 err (_(" * issue_load_balancing (Tload_balancing_t )\n")); 45 err (_(" * table_routing [nb_rename_unit][nb_inst_issue] (bool )\n")); 46 err (_(" * table_issue_type [nb_inst_issue][nb_type] (bool )\n")); 46 47 err (_(" * TYPE_ALU \n")); 47 48 err (_(" * TYPE_SHIFT \n")); … … 146 147 Tload_balancing_t _commit_load_balancing = fromString<Tload_balancing_t>(argv[x++]); 147 148 uint32_t _size_issue_queue = fromString<uint32_t >(argv[x++]); 149 issue_queue::Tissue_queue_scheme_t 150 _issue_queue_scheme = fromString<issue_queue::Tissue_queue_scheme_t>(argv[x++]); 148 151 uint32_t _nb_issue_queue_bank = fromString<uint32_t >(argv[x++]); 149 152 Tpriority_t _issue_priority = fromString<Tpriority_t >(argv[x++]); … … 308 311 _commit_load_balancing , 309 312 _size_issue_queue , 313 _issue_queue_scheme , 310 314 _nb_issue_queue_bank , 311 315 _issue_priority , -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/Parameters.h
r110 r111 57 57 // Issue 58 58 public : uint32_t _size_issue_queue ; 59 public : issue_queue::Tissue_queue_scheme_t 60 _issue_queue_scheme ; 59 61 public : uint32_t _nb_issue_queue_bank ; 60 62 public : Tpriority_t _issue_priority ; … … 152 154 // Issue 153 155 uint32_t size_issue_queue , 156 issue_queue::Tissue_queue_scheme_t 157 issue_queue_scheme , 154 158 uint32_t nb_issue_queue_bank , 155 159 Tpriority_t issue_priority , -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/Parameters.cpp
r110 r111 44 44 // Issue 45 45 uint32_t size_issue_queue , 46 issue_queue::Tissue_queue_scheme_t 47 issue_queue_scheme , 46 48 uint32_t nb_issue_queue_bank , 47 49 Tpriority_t issue_priority , … … 101 103 _commit_load_balancing = commit_load_balancing ; 102 104 _size_issue_queue = size_issue_queue ; 105 _issue_queue_scheme = issue_queue_scheme ; 103 106 _nb_issue_queue_bank = nb_issue_queue_bank ; 104 107 _issue_priority = issue_priority ; … … 271 274 _nb_rename_unit , 272 275 _size_issue_queue , 276 _issue_queue_scheme , 273 277 _nb_issue_queue_bank , 274 278 size_packet_id ,
Note: See TracChangeset
for help on using the changeset viewer.