- Timestamp:
- Jan 21, 2009, 10:53:13 PM (16 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo
- Files:
-
- 36 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp
r101 r104 441 441 transaction_in.push_back(execute_transaction(_param,0,0,0,233,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbeef,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - == - 442 442 transaction_in.push_back(execute_transaction(_param,0,0,0,234,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - > - 443 transaction_in.push_back(execute_transaction(_param,0,0,0,235,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15, 0,EXCEPTION_NONE ,0)); // - < -443 transaction_in.push_back(execute_transaction(_param,0,0,0,235,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - < - 444 444 transaction_in.push_back(execute_transaction(_param,0,0,0,236,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbeef,0x21524111,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - == + (in unsigned) 445 445 transaction_in.push_back(execute_transaction(_param,0,0,0,237,OPERATION_TEST_L_SFGES ,TYPE_TEST,0,0 ,0xdeadbeef,0x11111111,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - > + (in unsigned) … … 452 452 transaction_in.push_back(execute_transaction(_param,0,0,0,252,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0x21071981,0x25071959,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // + < + 453 453 transaction_in.push_back(execute_transaction(_param,0,0,0,253,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbeef,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - == - 454 transaction_in.push_back(execute_transaction(_param,0,0,0,254,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15, FLAG_F,EXCEPTION_NONE ,0)); // - > -455 transaction_in.push_back(execute_transaction(_param,0,0,0,255,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15, 0,EXCEPTION_NONE ,0)); // - < -454 transaction_in.push_back(execute_transaction(_param,0,0,0,254,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - > - 455 transaction_in.push_back(execute_transaction(_param,0,0,0,255,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - < - 456 456 transaction_in.push_back(execute_transaction(_param,0,0,0,256,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbeef,0x21524111,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - == + (in unsigned) 457 457 transaction_in.push_back(execute_transaction(_param,0,0,0,257,OPERATION_TEST_L_SFGTS ,TYPE_TEST,0,0 ,0xdeadbeef,0x11111111,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - > + (in unsigned) … … 464 464 transaction_in.push_back(execute_transaction(_param,0,0,0,272,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0x21071981,0x25071959,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // + < + 465 465 transaction_in.push_back(execute_transaction(_param,0,0,0,273,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbeef,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - == - 466 transaction_in.push_back(execute_transaction(_param,0,0,0,274,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15, 0,EXCEPTION_NONE ,0)); // - > -467 transaction_in.push_back(execute_transaction(_param,0,0,0,275,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15, FLAG_F,EXCEPTION_NONE ,0)); // - < -466 transaction_in.push_back(execute_transaction(_param,0,0,0,274,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - > - 467 transaction_in.push_back(execute_transaction(_param,0,0,0,275,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - < - 468 468 transaction_in.push_back(execute_transaction(_param,0,0,0,276,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbeef,0x21524111,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - == + (in unsigned) 469 469 transaction_in.push_back(execute_transaction(_param,0,0,0,277,OPERATION_TEST_L_SFLES ,TYPE_TEST,0,0 ,0xdeadbeef,0x11111111,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - > + (in unsigned) … … 476 476 transaction_in.push_back(execute_transaction(_param,0,0,0,292,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0x21071981,0x25071959,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // + < + 477 477 transaction_in.push_back(execute_transaction(_param,0,0,0,293,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbeef,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - == - 478 transaction_in.push_back(execute_transaction(_param,0,0,0,294,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15, 0,EXCEPTION_NONE ,0)); // - > -479 transaction_in.push_back(execute_transaction(_param,0,0,0,295,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15, FLAG_F,EXCEPTION_NONE ,0)); // - < -478 transaction_in.push_back(execute_transaction(_param,0,0,0,294,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbabe,0xdeadbeef,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - > - 479 transaction_in.push_back(execute_transaction(_param,0,0,0,295,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbeef,0xdeadbabe,0 ,0,63,0x0 ,1,15,0 ,EXCEPTION_NONE ,0)); // - < - 480 480 transaction_in.push_back(execute_transaction(_param,0,0,0,296,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbeef,0x21524111,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - == + (in unsigned) 481 481 transaction_in.push_back(execute_transaction(_param,0,0,0,297,OPERATION_TEST_L_SFLTS ,TYPE_TEST,0,0 ,0xdeadbeef,0x11111111,0 ,0,63,0x0 ,1,15,FLAG_F ,EXCEPTION_NONE ,0)); // - > + (in unsigned) … … 572 572 transaction_in.push_back(execute_transaction(_param,0,0,0,701,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x00002107,0x00001981,0 ,1,63,0x034a5387,1,15,0 ,EXCEPTION_NONE ,0)); 573 573 transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x00048698,0x0000dead,0 ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0)); 574 transaction_in.push_back(execute_transaction(_param,0,0,0,70 2,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x40000000,0x00000002,0 ,1,63,0x80000000,1,15, FLAG_OV,EXCEPTION_ALU_RANGE,0));575 transaction_in.push_back(execute_transaction(_param,0,0,0,70 2,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x40000000,0x00000004,0 ,1,63,0x00000000,1,15,FLAG_CY ,EXCEPTION_NONE,0));576 577 transaction_in.push_back(execute_transaction(_param,0,0,0, 700,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00000001,0x00000001,0 ,1,63,0x00000001,1,15,0 ,EXCEPTION_NONE ,0));578 transaction_in.push_back(execute_transaction(_param,0,0,0, 701,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00002107,0x00001981,0 ,1,63,0x034a5387,1,15,0 ,EXCEPTION_NONE ,0));579 transaction_in.push_back(execute_transaction(_param,0,0,0, 702,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00048698,0x0000dead,0 ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));580 transaction_in.push_back(execute_transaction(_param,0,0,0, 702,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x40000000,0x00000002,0 ,1,63,0x80000000,1,15, FLAG_OV,EXCEPTION_ALU_RANGE,0));581 transaction_in.push_back(execute_transaction(_param,0,0,0, 702,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x40000000,0x00000004,0 ,1,63,0x00000000,1,15,FLAG_CY ,EXCEPTION_NONE,0));574 transaction_in.push_back(execute_transaction(_param,0,0,0,703,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x40000000,0x00000002,0 ,1,63,0x80000000,1,15,0 ,EXCEPTION_NONE ,0)); 575 transaction_in.push_back(execute_transaction(_param,0,0,0,704,OPERATION_MUL_L_MUL ,TYPE_MUL,0,0 ,0x40000000,0x00000004,0 ,1,63,0x00000000,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0)); 576 577 transaction_in.push_back(execute_transaction(_param,0,0,0,800,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00000001,0x00000001,0 ,1,63,0x00000001,1,15,0 ,EXCEPTION_NONE ,0)); 578 transaction_in.push_back(execute_transaction(_param,0,0,0,801,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00002107,0x00001981,0 ,1,63,0x034a5387,1,15,0 ,EXCEPTION_NONE ,0)); 579 transaction_in.push_back(execute_transaction(_param,0,0,0,802,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x00048698,0x0000dead,0 ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0)); 580 transaction_in.push_back(execute_transaction(_param,0,0,0,803,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x40000000,0x00000002,0 ,1,63,0x80000000,1,15,0 ,EXCEPTION_NONE ,0)); 581 transaction_in.push_back(execute_transaction(_param,0,0,0,804,OPERATION_MUL_L_MULU ,TYPE_MUL,0,0 ,0x40000000,0x00000004,0 ,1,63,0x00000000,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0)); 582 582 583 583 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp
r97 r104 613 613 else 614 614 { 615 LABEL("out_MEMORY_OUT_DATA_RD[0]->read() : 0x%.8x",out_MEMORY_OUT_DATA_RD[0]->read()); 616 LABEL("data_wait : 0x%.8x",tab_request[packet_id]._data_wait); 617 615 618 TEST(Tgeneral_data_t , out_MEMORY_OUT_DATA_RD[0]->read(), tab_request[packet_id]._data_wait); 616 619 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h
r88 r104 65 65 public : Tdcache_address_t _mask_address_lsb ; 66 66 public : Tdcache_address_t _mask_address_msb ; 67 67 public : Tdcache_address_t _mask_check_hit_byte ; 68 68 69 //-----[ methods ]----------------------------------------------------------- 69 70 public : Parameters (uint32_t size_store_queue , -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h
r97 r104 147 147 #define must_check(x) (is_operation_memory_load(x)) 148 148 149 #define MASK_CHECK_BYTE_HIT 0xff // 1111_1111150 151 149 typedef enum 152 150 { -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp
r101 r104 74 74 log_printf(TRACE,Load_store_unit,FUNCTION," * data (old) : %.8x",data_old); 75 75 log_printf(TRACE,Load_store_unit,FUNCTION," * data (new) : %.8x",data_new); 76 log_printf(TRACE,Load_store_unit,FUNCTION," * address : %.8x",_load_queue [internal_MEMORY_OUT_PTR]._address); 76 77 log_printf(TRACE,Load_store_unit,FUNCTION," * rdata : %.8x",_load_queue [internal_MEMORY_OUT_PTR]._rdata); 77 78 log_printf(TRACE,Load_store_unit,FUNCTION," * shift : %d",_load_queue [internal_MEMORY_OUT_PTR]._shift); … … 86 87 memory_out_data_rd = (have_exception)?data_old:data_new; 87 88 memory_out_exception = (_load_queue[internal_MEMORY_OUT_PTR]._state == LOAD_QUEUE_COMMIT_CHECK)?EXCEPTION_MEMORY_LOAD_SPECULATIVE:exception; 89 90 log_printf(TRACE,Load_store_unit,FUNCTION," * exception : %d",exception); 91 log_printf(TRACE,Load_store_unit,FUNCTION," * exception : %d",memory_out_exception); 88 92 89 93 break; // we have find a entry !!! stop the search … … 203 207 // FIXME : il peut avoir plusieurs store avec le même paquet_id ... pour l'instant pas très grave car pas de retour (enfin seul les bus error sont des retours) 204 208 dcache_req_packet_id = DCACHE_REQ_IS_STORE(reg_STORE_QUEUE_PTR_READ); 205 dcache_req_address = _store_queue [reg_STORE_QUEUE_PTR_READ]._address 209 dcache_req_address = _store_queue [reg_STORE_QUEUE_PTR_READ]._address; 206 210 dcache_req_type = operation_to_dcache_type(_store_queue [reg_STORE_QUEUE_PTR_READ]._operation); 207 dcache_req_wdata = _store_queue [reg_STORE_QUEUE_PTR_READ]._wdata 211 dcache_req_wdata = _store_queue [reg_STORE_QUEUE_PTR_READ]._wdata; 208 212 } 209 213 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp
r101 r104 57 57 for (uint32_t i=0, nb_check=0; (nb_check<_param->_nb_port_check) and (i<_param->_size_load_queue); i++) 58 58 { 59 // Get an index from load queue 59 60 uint32_t index_load = (i + reg_LOAD_QUEUE_CHECK_PRIORITY)%_param->_size_load_queue; 60 61 if (((_load_queue[index_load]._state == LOAD_QUEUE_WAIT_CHECK) or 61 62 // Test if this load must ckecked store queue 63 if (((_load_queue[index_load]._state == LOAD_QUEUE_WAIT_CHECK) or 62 64 (_load_queue[index_load]._state == LOAD_QUEUE_COMMIT_CHECK) or 63 65 (_load_queue[index_load]._state == LOAD_QUEUE_CHECK)) and … … 69 71 70 72 // find a entry that it need a check 71 72 73 Tlsq_ptr_t index_store = _load_queue[index_load]._store_queue_ptr_write; 74 // Init variable 73 75 bool end_check = false; 74 76 bool change_state = false; … … 95 97 log_printf(TRACE,Load_store_unit,FUNCTION," * index_store : %d",index_store); 96 98 99 // switch on store_queue state 97 100 switch (_store_queue[index_store]._state) 98 101 { … … 107 110 bool test_thread_id = true; 108 111 109 // Test thread id .112 // Test thread id 110 113 if (_param->_have_port_context_id) 111 114 test_thread_id &= (_load_queue[index_load]._context_id == _store_queue[index_store]._context_id); … … 117 120 if (test_thread_id) 118 121 { 122 // the load and store are in the same thread. Now, we must test address. 123 119 124 log_printf(TRACE,Load_store_unit,FUNCTION," * load and store is the same thread."); 120 // the load and store are in the same thread. Now, we must test address.121 125 Tdcache_address_t load_addr = _load_queue [index_load ]._address; 122 126 Tdcache_address_t store_addr = _store_queue[index_store]._address; … … 126 130 log_printf(TRACE,Load_store_unit,FUNCTION," * load_addr & mask_address_msb : %.8x.",load_addr & _param->_mask_address_msb); 127 131 log_printf(TRACE,Load_store_unit,FUNCTION," * store_addr & mask_address_msb : %.8x.",store_addr & _param->_mask_address_msb); 128 // Test if the both address target the same word132 // Test if the both address target the same "word" 129 133 if ((load_addr & _param->_mask_address_msb) == 130 134 (store_addr & _param->_mask_address_msb)) … … 143 147 // the only case is (4) 144 148 149 // Read data 145 150 Tgeneral_data_t load_data = _load_queue [index_load ]._rdata ; 146 151 Tgeneral_data_t store_data = _store_queue[index_store]._wdata ; 147 152 148 log_printf(TRACE,Load_store_unit,FUNCTION," * load_data (init) : %.8x",load_data); 149 log_printf(TRACE,Load_store_unit,FUNCTION," * store_data (init) : %.8x",store_data); 153 log_printf(TRACE,Load_store_unit,FUNCTION," * load_data (before): 0x%.8x",load_data); 154 log_printf(TRACE,Load_store_unit,FUNCTION," * store_data (before): 0x%.8x",store_data); 155 156 uint32_t store_nb_byte = (1<<memory_access(_store_queue[index_store]._operation)); 157 158 // Take interval to the store 150 159 uint32_t store_num_byte_min = (store_addr & _param->_mask_address_lsb); 151 uint32_t store_num_byte_max = store_num_byte_min+(1<<memory_access(_store_queue[index_store]._operation)); 160 uint32_t store_num_byte_max = store_num_byte_min+store_nb_byte; 161 152 162 log_printf(TRACE,Load_store_unit,FUNCTION," * store_num_byte_min : %d",store_num_byte_min); 153 163 log_printf(TRACE,Load_store_unit,FUNCTION," * store_num_byte_max : %d",store_num_byte_max); … … 155 165 log_printf(TRACE,Load_store_unit,FUNCTION," * check_hit_byte : %x",_load_queue[index_load]._check_hit_byte); 156 166 // The bypass is checked byte per byte 157 for (uint32_t byte=store_num_byte_min; byte<store_num_byte_max; byte ++) 167 // Is same endianness : because to change endianness, we must write in special register. Also the pipeline is flushed. 168 bool is_big_endian = true; 169 170 for (uint32_t num_store_byte=store_num_byte_min; num_store_byte<store_num_byte_max; num_store_byte ++) 158 171 { 159 uint32_t mask = 1<<byte; 160 uint32_t index = byte<<3; 161 log_printf(TRACE,Load_store_unit,FUNCTION," * byte : %d",byte); 162 log_printf(TRACE,Load_store_unit,FUNCTION," * mask : %d",mask); 163 log_printf(TRACE,Load_store_unit,FUNCTION," * index : %d",index); 164 // Accept the bypass if they had not a previous bypass with an another store 172 // Make a mask 173 uint32_t num_load_byte; 174 175 if (is_big_endian) 176 { 177 // sd 0 : 0 1 2 3 4 5 6 7 178 // ld 0 : 0 1 2 3 4 5 6 7 >> 0 179 // lw 0 : 0 1 2 3 >> 0 -4 180 // lw 4 : 4 5 6 7 >> 32 +4 181 // lh 0 : 0 1 >> 0 -6 182 // lh 2 : 2 3 >> 16 -2 183 // lh 4 : 4 5 >> 32 +2 184 // lh 6 : 6 7 >> 48 +6 185 // lb 0 : 0 >> 0 -7 186 // lb 1 : 1 >> 8 -5 187 // lb 2 : 2 >> 16 -3 188 // lb 3 : 3 >> 24 -1 189 // lb 4 : 4 >> 32 +1 190 // lb 5 : 5 >> 40 +3 191 // lb 6 : 6 >> 48 +5 192 // lb 7 : 7 >> 56 +7 193 194 // diff : (store_nb_byte + load_nb_byte) - 2*nb_load_byte*((num_store_byte+1) 195 196 // store duplicate = all store access can be see as full size_data store 197 uint32_t load_nb_byte = (1<<memory_access(_load_queue [index_load ]._operation)); 198 199 // log_printf(TRACE,Load_store_unit,FUNCTION," * num_store_byte : %d",num_store_byte); 200 // log_printf(TRACE,Load_store_unit,FUNCTION," * size_general_data>>3 : %d",(_param->_size_general_data>>3)); 201 // log_printf(TRACE,Load_store_unit,FUNCTION," * load_nb_byte : %d",load_nb_byte); 202 // log_printf(TRACE,Load_store_unit,FUNCTION," * x = ((_param->_size_general_data>>3)+load_nb_byte-2*load_nb_byte*(num_store_byte/load_nb_byte+1)) = %d+%d-%d*%d = %d" 203 // , (_param->_size_general_data>>3) 204 // , load_nb_byte 205 // , 2*load_nb_byte 206 // ,((num_store_byte/load_nb_byte)+1) 207 // ,((_param->_size_general_data>>3)+load_nb_byte-2*load_nb_byte*((num_store_byte/load_nb_byte)+1))); 208 209 210 num_load_byte =num_store_byte+((_param->_size_general_data>>3)+load_nb_byte-2*load_nb_byte*((num_store_byte/load_nb_byte)+1)); 211 } 212 else 213 { 214 // sd 0 : 0 1 2 3 4 5 6 7 215 // ld 0 : 0 1 2 3 4 5 6 7 >> 0 216 // lw 0 : 4 5 6 7 >> 0 217 // lw 4 : 0 1 2 3 >> 32 218 // lh 0 : 6 7 >> 0 219 // lh 2 : 4 5 >> 16 220 // lh 4 : 2 3 >> 32 221 // lh 6 : 0 1 >> 48 222 // lb 0 : 7 >> 0 223 // lb 1 : 6 >> 8 224 // lb 2 : 5 >> 16 225 // lb 3 : 4 >> 24 226 // lb 4 : 3 >> 32 227 // lb 5 : 2 >> 40 228 // lb 6 : 1 >> 48 229 // lb 7 : 0 >> 56 230 231 num_load_byte = num_store_byte; 232 } 233 234 uint32_t mask = 1<<num_load_byte; 235 236 log_printf(TRACE,Load_store_unit,FUNCTION," * num_store_byte : %d",num_store_byte); 237 log_printf(TRACE,Load_store_unit,FUNCTION," * num_load_byte : %d",num_load_byte); 238 log_printf(TRACE,Load_store_unit,FUNCTION," * mask : %d",mask); 239 240 // Accept the bypass if : 241 // * they have not a previous bypass with an another store 242 // * it's a valid request of load 165 243 if ((_load_queue[index_load]._check_hit_byte&mask)==0) 166 244 { 245 // Note : Store is duplicate = all store access can be see as full size_data store 246 247 uint32_t num_store_bit_min = num_store_byte<<3; //*8 248 // uint32_t num_store_bit_max = num_store_bit_min+8-1; 249 uint32_t num_load_bit_min = num_load_byte <<3; //*8 250 uint32_t num_load_bit_max = num_load_bit_min+8-1; 251 167 252 log_printf(TRACE,Load_store_unit,FUNCTION," * bypass !!!"); 168 log_printf(TRACE,Load_store_unit,FUNCTION," * rdata_old : %.8x", load_data); 169 load_data = insert<Tdcache_data_t>(load_data, store_data, index+8-1, index); 253 // log_printf(TRACE,Load_store_unit,FUNCTION," * interval store : [%d:%d]",num_store_bit_max,num_store_bit_min); 254 log_printf(TRACE,Load_store_unit,FUNCTION," * interval store : [..:%d]",num_store_bit_min); 255 log_printf(TRACE,Load_store_unit,FUNCTION," * interval load : [%d:%d]",num_load_bit_max,num_load_bit_min); 256 log_printf(TRACE,Load_store_unit,FUNCTION," * rdata_old : 0x%.8x", load_data); 257 258 load_data = ((((store_data>>num_store_bit_min) & 0xff) << num_load_bit_min) | 259 mask_not<Tdcache_data_t>(load_data,num_load_bit_max,num_load_bit_min)); 260 170 261 _load_queue[index_load]._check_hit_byte |= mask; 171 262 _load_queue[index_load]._check_hit = 1; 172 263 change_state = true; 173 264 174 log_printf(TRACE,Load_store_unit,FUNCTION," * rdata_new : %.8x", load_data);265 log_printf(TRACE,Load_store_unit,FUNCTION," * rdata_new : 0x%.8x", load_data); 175 266 } 176 267 } 177 268 178 269 _load_queue[index_load]._rdata = load_data; 270 log_printf(TRACE,Load_store_unit,FUNCTION," * load_data (after) : 0x%.8x",load_data); 179 271 180 272 log_printf(TRACE,Load_store_unit,FUNCTION," * check_hit : %x",_load_queue[index_load]._check_hit); … … 182 274 183 275 log_printf(TRACE,Load_store_unit,FUNCTION," * mask_end_check : %x",(-1& _param->_mask_address_lsb)); 276 log_printf(TRACE,Load_store_unit,FUNCTION," * mask_check_hit_byte: %x",_param->_mask_check_hit_byte); 184 277 // The check is finish if all bit is set 185 end_check = (_load_queue[index_load]._check_hit_byte == MASK_CHECK_BYTE_HIT);278 end_check = (_load_queue[index_load]._check_hit_byte == _param->_mask_check_hit_byte); 186 279 } 187 280 } … … 387 480 388 481 // reordering data 389 _store_queue [index]._wdata = duplicate<Tgeneral_data_t>(_param->_size_general_data,PORT_READ(in_MEMORY_IN_DATA_RB[internal_MEMORY_IN_PORT]), memory_size(operation), 0); 482 _store_queue [index]._wdata = duplicate<Tgeneral_data_t>(_param->_size_general_data,PORT_READ(in_MEMORY_IN_DATA_RB[internal_MEMORY_IN_PORT]), memory_size(operation), 0); 390 483 // _store_queue [index]._num_reg_rd = PORT_READ(in_MEMORY_IN_NUM_REG_RD [internal_MEMORY_IN_PORT]); 391 484 } … … 500 593 (PORT_READ(in_DCACHE_REQ_ACK[0]) == 1)) 501 594 { 502 log_printf(TRACE,Load_store_unit,FUNCTION," * DCACHE_REQ [0]");595 log_printf(TRACE,Load_store_unit,FUNCTION," * DCACHE_REQ [0]"); 503 596 504 597 switch (internal_DCACHE_REQ_SELECT_QUEUE) … … 542 635 bool have_exception = (exception != EXCEPTION_MEMORY_NONE); 543 636 544 545 637 if (have_exception) 546 638 _load_queue [ptr_write]._state = LOAD_QUEUE_COMMIT; … … 570 662 Tdcache_address_t address = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._address; 571 663 Tdcache_address_t address_lsb = (address & _param->_mask_address_lsb); 572 Tdcache_address_t check_hit_byte = gen_mask_not<Tdcache_address_t>(address_lsb+memory_access(operation)+1,address_lsb); 573 _load_queue [ptr_write]._context_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._context_id ; 574 _load_queue [ptr_write]._front_end_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._front_end_id ; 575 _load_queue [ptr_write]._ooo_engine_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._ooo_engine_id ; 576 _load_queue [ptr_write]._packet_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._packet_id ; 577 _load_queue [ptr_write]._operation = operation; 664 Tdcache_address_t check_hit_byte = gen_mask_not<Tdcache_address_t>(address_lsb+(memory_size(operation)>>3)-1,address_lsb) & _param->_mask_check_hit_byte; 665 666 log_printf(TRACE,Load_store_unit,FUNCTION," * address : 0x%.8x", address); 667 log_printf(TRACE,Load_store_unit,FUNCTION," * address_lsb : 0x%.8x", address_lsb); 668 log_printf(TRACE,Load_store_unit,FUNCTION," * operation : %d", operation); 669 log_printf(TRACE,Load_store_unit,FUNCTION," * memory_size : %d", memory_size(operation)); 670 log_printf(TRACE,Load_store_unit,FUNCTION," * check_hit_byte : 0x%x", check_hit_byte); 671 672 _load_queue [ptr_write]._context_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._context_id; 673 _load_queue [ptr_write]._front_end_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._front_end_id; 674 _load_queue [ptr_write]._ooo_engine_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._ooo_engine_id; 675 _load_queue [ptr_write]._packet_id = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._packet_id; 676 _load_queue [ptr_write]._operation = operation; 578 677 _load_queue [ptr_write]._store_queue_ptr_write = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._store_queue_ptr_write; 579 _load_queue [ptr_write]._address = address;580 _load_queue [ptr_write]._check_hit_byte = check_hit_byte;581 _load_queue [ptr_write]._check_hit = 0;582 _load_queue [ptr_write]._shift = address<<3;583 _load_queue [ptr_write]._is_load_signed = is_operation_memory_load_signed(operation);584 _load_queue [ptr_write]._access_size = memory_size(operation);678 _load_queue [ptr_write]._address = address; 679 _load_queue [ptr_write]._check_hit_byte = check_hit_byte; 680 _load_queue [ptr_write]._check_hit = 0; 681 _load_queue [ptr_write]._shift = address_lsb<<3;// *8 682 _load_queue [ptr_write]._is_load_signed = is_operation_memory_load_signed(operation); 683 _load_queue [ptr_write]._access_size = memory_size(operation); 585 684 // NOTE : if have an exception, must write in register, because a depend instruction wait the load data. 586 _load_queue [ptr_write]._write_rd = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._write_rd ;685 _load_queue [ptr_write]._write_rd = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._write_rd ; 587 686 588 _load_queue [ptr_write]._num_reg_rd = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._num_reg_rd ;589 _load_queue [ptr_write]._exception = exception;590 _load_queue [ptr_write]._rdata = address; // to the exception687 _load_queue [ptr_write]._num_reg_rd = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._num_reg_rd ; 688 _load_queue [ptr_write]._exception = exception; 689 _load_queue [ptr_write]._rdata = address; // to the exception 591 690 592 691 log_printf(TRACE,Load_store_unit,FUNCTION," * speculative_access_queue"); … … 628 727 #endif 629 728 630 _load_queue [packet_id]._rdata = rdata; 729 Tdcache_data_t data = _load_queue [packet_id]._rdata; 730 731 log_printf(TRACE,Load_store_unit,FUNCTION," * data construction"); 732 log_printf(TRACE,Load_store_unit,FUNCTION," * data from cache : 0x%.8x",rdata); 733 log_printf(TRACE,Load_store_unit,FUNCTION," * data (before) : 0x%.8x", data); 734 log_printf(TRACE,Load_store_unit,FUNCTION," * check_hit_byte : 0x%x" ,_load_queue [packet_id]._check_hit_byte); 735 for (uint32_t i=0;i<(_param->_size_general_data>>3)/*8*/; ++i) 736 // Test if this byte has been checked 737 if ((_load_queue [packet_id]._check_hit_byte & (1<<i)) == 0) 738 { 739 log_printf(TRACE,Load_store_unit,FUNCTION," * no previous check ]%d:%d]",(i+1)<<3,i<<3); 740 data = insert<Tdcache_data_t>(data,rdata,((i+1)<<3)-1,i<<3); 741 } 742 log_printf(TRACE,Load_store_unit,FUNCTION," * data (after) : 0x%.8x", data); 743 744 _load_queue [packet_id]._rdata = data; 631 745 632 746 if (error != DCACHE_ERROR_NONE) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Parameters.cpp
r97 r104 64 64 _mask_address_lsb = gen_mask<Tdcache_address_t>(log2(size_general_data/8)); 65 65 _mask_address_msb = gen_mask<Tdcache_address_t>(size_general_data) << log2(size_general_data/8); 66 _mask_check_hit_byte = 0; 67 68 for (uint32_t i=0; i<(size_general_data>>3) /*8*/; ++i) 69 _mask_check_hit_byte |= (1<<i); 66 70 67 71 test(); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/src/test.cpp
r101 r104 95 95 ALLOC2_SC_SIGNAL(out_RETIRE_CONTEXT_ID ,"out_RETIRE_CONTEXT_ID ",Tcontext_t ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 96 96 //ALLOC2_SC_SIGNAL(out_RETIRE_RENAME_UNIT_ID ,"out_RETIRE_RENAME_UNIT_ID ",Tcontext_t ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 97 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_STATE ,"out_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]);98 97 ALLOC2_SC_SIGNAL(out_RETIRE_USE_STORE_QUEUE ,"out_RETIRE_USE_STORE_QUEUE ",Tcontrol_t ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 99 98 ALLOC2_SC_SIGNAL(out_RETIRE_USE_LOAD_QUEUE ,"out_RETIRE_USE_LOAD_QUEUE ",Tcontrol_t ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); … … 114 113 ALLOC2_SC_SIGNAL(out_RETIRE_NUM_REG_RE_PHY_OLD ,"out_RETIRE_NUM_REG_RE_PHY_OLD ",Tspecial_address_t,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 115 114 ALLOC2_SC_SIGNAL(out_RETIRE_NUM_REG_RE_PHY_NEW ,"out_RETIRE_NUM_REG_RE_PHY_NEW ",Tspecial_address_t,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 115 116 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_VAL ,"out_RETIRE_EVENT_VAL ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 117 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_ACK ," in_RETIRE_EVENT_ACK ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 118 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_STATE ,"out_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_front_end,_param->_nb_context[it1]); 119 116 120 ALLOC1_SC_SIGNAL( in_COMMIT_VAL ," in_COMMIT_VAL ",Tcontrol_t ,_param->_nb_inst_commit); 117 121 ALLOC1_SC_SIGNAL(out_COMMIT_ACK ,"out_COMMIT_ACK ",Tcontrol_t ,_param->_nb_inst_commit); … … 231 235 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_CONTEXT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 232 236 //INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_RENAME_UNIT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 233 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_EVENT_STATE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]);234 237 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_USE_STORE_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 235 238 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_USE_LOAD_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); … … 251 254 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_NUM_REG_RE_PHY_OLD ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 252 255 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 253 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_VAL ,_param->_nb_inst_commit); 254 INSTANCE1_SC_SIGNAL(_Commit_unit,out_COMMIT_ACK ,_param->_nb_inst_commit); 255 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_WEN ,_param->_nb_inst_commit); 256 if (_param->_have_port_rob_ptr ) 257 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_PACKET_ID ,_param->_nb_inst_commit); 258 //INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_OPERATION ,_param->_nb_inst_commit); 259 //INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_TYPE ,_param->_nb_inst_commit); 260 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_FLAGS ,_param->_nb_inst_commit); 261 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_EXCEPTION ,_param->_nb_inst_commit); 262 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_NO_SEQUENCE ,_param->_nb_inst_commit); 263 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_ADDRESS ,_param->_nb_inst_commit); 264 INSTANCE1_SC_SIGNAL(_Commit_unit,out_COMMIT_NUM_REG_RD ,_param->_nb_inst_commit); 256 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_EVENT_VAL ,_param->_nb_front_end,_param->_nb_context[it1]); 257 INSTANCE2_SC_SIGNAL(_Commit_unit, in_RETIRE_EVENT_ACK ,_param->_nb_front_end,_param->_nb_context[it1]); 258 INSTANCE2_SC_SIGNAL(_Commit_unit,out_RETIRE_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context[it1]); 259 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_VAL ,_param->_nb_inst_commit); 260 INSTANCE1_SC_SIGNAL(_Commit_unit,out_COMMIT_ACK ,_param->_nb_inst_commit); 261 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_WEN ,_param->_nb_inst_commit); 262 if (_param->_have_port_rob_ptr ) 263 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_PACKET_ID ,_param->_nb_inst_commit); 264 //INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_OPERATION ,_param->_nb_inst_commit); 265 //INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_TYPE ,_param->_nb_inst_commit); 266 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_FLAGS ,_param->_nb_inst_commit); 267 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_EXCEPTION ,_param->_nb_inst_commit); 268 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_NO_SEQUENCE ,_param->_nb_inst_commit); 269 INSTANCE1_SC_SIGNAL(_Commit_unit, in_COMMIT_ADDRESS ,_param->_nb_inst_commit); 270 INSTANCE1_SC_SIGNAL(_Commit_unit,out_COMMIT_NUM_REG_RD ,_param->_nb_inst_commit); 265 271 INSTANCE1_SC_SIGNAL(_Commit_unit,out_REEXECUTE_VAL ,_param->_nb_inst_reexecute); 266 272 INSTANCE1_SC_SIGNAL(_Commit_unit, in_REEXECUTE_ACK ,_param->_nb_inst_reexecute); … … 636 642 DELETE2_SC_SIGNAL(out_RETIRE_CONTEXT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 637 643 //DELETE2_SC_SIGNAL(out_RETIRE_RENAME_UNIT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 638 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_STATE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]);639 644 DELETE2_SC_SIGNAL(out_RETIRE_USE_STORE_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 640 645 DELETE2_SC_SIGNAL(out_RETIRE_USE_LOAD_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); … … 655 660 DELETE2_SC_SIGNAL(out_RETIRE_NUM_REG_RE_PHY_OLD ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 656 661 DELETE2_SC_SIGNAL(out_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 662 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_VAL ,_param->_nb_front_end,_param->_nb_context[it1]); 663 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_ACK ,_param->_nb_front_end,_param->_nb_context[it1]); 664 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context[it1]); 657 665 DELETE1_SC_SIGNAL( in_COMMIT_VAL ,_param->_nb_inst_commit); 658 666 DELETE1_SC_SIGNAL(out_COMMIT_ACK ,_param->_nb_inst_commit); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h
r101 r104 112 112 public : SC_OUT(Tcontext_t ) *** out_RETIRE_CONTEXT_ID ;//[nb_rename_unit][nb_inst_retire] 113 113 //public : SC_OUT(Tcontext_t ) *** out_RETIRE_RENAME_UNIT_ID ;//[nb_rename_unit][nb_inst_retire] 114 public : SC_OUT(Tevent_state_t ) *** out_RETIRE_EVENT_STATE ;//[nb_rename_unit][nb_inst_retire]115 114 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_USE_STORE_QUEUE ;//[nb_rename_unit][nb_inst_retire] 116 115 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_USE_LOAD_QUEUE ;//[nb_rename_unit][nb_inst_retire] … … 131 130 public : SC_OUT(Tspecial_address_t ) *** out_RETIRE_NUM_REG_RE_PHY_OLD ;//[nb_rename_unit][nb_inst_retire] 132 131 public : SC_OUT(Tspecial_address_t ) *** out_RETIRE_NUM_REG_RE_PHY_NEW ;//[nb_rename_unit][nb_inst_retire] 132 133 // ~~~~~[ Interface : "commit" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 134 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_EVENT_VAL ;//[nb_front_end][nb_context] 135 public : SC_IN (Tcontrol_t ) *** in_RETIRE_EVENT_ACK ;//[nb_front_end][nb_context] 136 public : SC_OUT(Tevent_state_t ) *** out_RETIRE_EVENT_STATE ;//[nb_front_end][nb_context] 133 137 134 138 // ~~~~~[ Interface : "commit" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 223 227 224 228 private : Tevent_state_t ** reg_EVENT_STATE ;//[nb_front_end][nb_context] 229 private : bool ** reg_EVENT_FLUSH ;//[nb_front_end][nb_context] 230 231 private : Taddress_t ** reg_PC_PREVIOUS ;//[nb_front_end][nb_context] 232 private : Taddress_t ** reg_PC_CURRENT ;//[nb_front_end][nb_context] 233 private : Taddress_t ** reg_PC_CURRENT_IS_DS ;//[nb_front_end][nb_context] 234 private : Taddress_t ** reg_PC_CURRENT_IS_DS_TAKE ;//[nb_front_end][nb_context] 235 private : Taddress_t ** reg_PC_NEXT ;//[nb_front_end][nb_context] 225 236 226 237 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 250 261 251 262 private : Tcontrol_t ** internal_EVENT_ACK ;//[nb_front_end][nb_context] 263 264 private : Tcontrol_t ** internal_RETIRE_EVENT_VAL ;//[nb_front_end][nb_context] 252 265 #endif 253 266 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit.cpp
r88 r104 81 81 internal_EVENT_ACK [i][j] = 1; 82 82 PORT_WRITE(out_EVENT_ACK [i][j], internal_EVENT_ACK [i][j]); 83 84 internal_RETIRE_EVENT_VAL [i][j] = 1; 85 PORT_WRITE(out_RETIRE_EVENT_VAL [i][j], internal_RETIRE_EVENT_VAL [i][j]); 83 86 } 84 87 … … 152 155 (*(out_RETIRE_CONTEXT_ID [i][j])) (*(in_RETIRE_ACK [x][y])); 153 156 // (*(out_RETIRE_RENAME_UNIT_ID [i][j])) (*(in_RETIRE_ACK [x][y])); 154 (*(out_RETIRE_EVENT_STATE [i][j])) (*(in_RETIRE_ACK [x][y]));155 157 (*(out_RETIRE_USE_STORE_QUEUE [i][j])) (*(in_RETIRE_ACK [x][y])); 156 158 (*(out_RETIRE_USE_LOAD_QUEUE [i][j])) (*(in_RETIRE_ACK [x][y])); … … 183 185 (*(out_RETIRE_CONTEXT_ID [i][j])) (*(in_SPR_WRITE_ACK [x][y])); 184 186 // (*(out_RETIRE_RENAME_UNIT_ID [i][j])) (*(in_SPR_WRITE_ACK [x][y])); 185 (*(out_RETIRE_EVENT_STATE [i][j])) (*(in_SPR_WRITE_ACK [x][y]));186 187 (*(out_RETIRE_USE_STORE_QUEUE [i][j])) (*(in_SPR_WRITE_ACK [x][y])); 187 188 (*(out_RETIRE_USE_LOAD_QUEUE [i][j])) (*(in_SPR_WRITE_ACK [x][y])); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp
r101 r104 104 104 _ALLOC2_SIGNAL_OUT(out_RETIRE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 105 105 // _ALLOC2_SIGNAL_OUT(out_RETIRE_RENAME_UNIT_ID ,"rename_unit_id" ,Tcontext_t ,_param->_size_rename_unit_id ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 106 _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_STATE ,"event_state" ,Tevent_state_t ,_param->_size_event_state ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]);107 106 _ALLOC2_SIGNAL_OUT(out_RETIRE_USE_STORE_QUEUE ,"use_store_queue" ,Tcontrol_t ,1 ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); 108 107 _ALLOC2_SIGNAL_OUT(out_RETIRE_USE_LOAD_QUEUE ,"use_load_queue" ,Tcontrol_t ,1 ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1]); … … 125 124 } 126 125 126 // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 127 { 128 ALLOC2_INTERFACE("retire_event",OUT,SOUTH, _("Interface to update rename_unit."),_param->_nb_front_end,_param->_nb_context[it1]); 129 130 _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_VAL ,VAL,_param->_nb_front_end,_param->_nb_context[it1]); 131 _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_ACK ,ACK,_param->_nb_front_end,_param->_nb_context[it1]); 132 _ALLOC2_SIGNAL_OUT(out_RETIRE_EVENT_STATE ,"state" ,Tevent_state_t ,_param->_size_event_state ,_param->_nb_front_end,_param->_nb_context[it1]); 133 } 134 127 135 // ~~~~~[ Interface : "commit" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 128 136 { … … 243 251 { 244 252 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 245 internal_BANK_INSERT_VAL = new Tcontrol_t [_param->_nb_bank]; 246 internal_BANK_INSERT_NUM_RENAME_UNIT = new uint32_t [_param->_nb_bank]; 247 internal_BANK_INSERT_NUM_INST = new uint32_t [_param->_nb_bank]; 248 249 internal_BANK_COMMIT_VAL = new Tcontrol_t * [_param->_nb_bank]; 250 internal_BANK_COMMIT_NUM_INST = new uint32_t * [_param->_nb_bank]; 251 internal_BANK_COMMIT_ENTRY = new entry_t ** [_param->_nb_bank]; 253 ALLOC1(internal_BANK_INSERT_VAL ,Tcontrol_t,_param->_nb_bank); 254 ALLOC1(internal_BANK_INSERT_NUM_RENAME_UNIT ,uint32_t ,_param->_nb_bank); 255 ALLOC1(internal_BANK_INSERT_NUM_INST ,uint32_t ,_param->_nb_bank); 256 257 ALLOC2(internal_BANK_COMMIT_VAL ,Tcontrol_t,_param->_nb_bank,_param->_nb_bank_access_commit); 258 ALLOC2(internal_BANK_COMMIT_NUM_INST ,uint32_t ,_param->_nb_bank,_param->_nb_bank_access_commit); 259 ALLOC2(internal_BANK_COMMIT_ENTRY ,entry_t * ,_param->_nb_bank,_param->_nb_bank_access_commit); 260 261 ALLOC1(internal_BANK_RETIRE_VAL ,Tcontrol_t,_param->_nb_bank); 262 ALLOC1(internal_BANK_RETIRE_NUM_RENAME_UNIT ,uint32_t ,_param->_nb_bank); 263 ALLOC1(internal_BANK_RETIRE_NUM_INST ,uint32_t ,_param->_nb_bank); 264 265 ALLOC1(internal_REEXECUTE_VAL ,Tcontrol_t,_param->_nb_inst_reexecute); 266 ALLOC1(internal_REEXECUTE_NUM_BANK ,uint32_t ,_param->_nb_inst_reexecute); 267 268 ALLOC1(internal_BRANCH_COMPLETE_VAL ,Tcontrol_t,_param->_nb_inst_branch_complete); 269 ALLOC1(internal_BRANCH_COMPLETE_NUM_BANK ,uint32_t ,_param->_nb_inst_branch_complete); 270 271 ALLOC2(internal_EVENT_ACK ,Tcontrol_t,_param->_nb_front_end,_param->_nb_context [it1]); 272 273 ALLOC2(internal_RETIRE_EVENT_VAL ,Tcontrol_t,_param->_nb_front_end,_param->_nb_context[it1]); 274 275 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 276 ALLOC1(_rob ,std::list<entry_t*>,_param->_nb_bank); 252 277 253 for (uint32_t i=0; i<_param->_nb_bank; i++) 254 { 255 internal_BANK_COMMIT_VAL [i] = new Tcontrol_t [_param->_nb_bank_access_commit]; 256 internal_BANK_COMMIT_NUM_INST [i] = new uint32_t [_param->_nb_bank_access_commit]; 257 internal_BANK_COMMIT_ENTRY [i] = new entry_t * [_param->_nb_bank_access_commit]; 258 } 259 260 internal_BANK_RETIRE_VAL = new Tcontrol_t [_param->_nb_bank]; 261 internal_BANK_RETIRE_NUM_RENAME_UNIT = new uint32_t [_param->_nb_bank]; 262 internal_BANK_RETIRE_NUM_INST = new uint32_t [_param->_nb_bank]; 263 264 internal_REEXECUTE_VAL = new Tcontrol_t [_param->_nb_inst_reexecute]; 265 internal_REEXECUTE_NUM_BANK = new uint32_t [_param->_nb_inst_reexecute]; 266 267 internal_BRANCH_COMPLETE_VAL = new Tcontrol_t [_param->_nb_inst_branch_complete]; 268 internal_BRANCH_COMPLETE_NUM_BANK = new uint32_t [_param->_nb_inst_branch_complete]; 269 270 internal_EVENT_ACK = new Tcontrol_t * [_param->_nb_front_end]; 271 for (uint32_t i=0; i<_param->_nb_front_end; i++) 272 internal_EVENT_ACK [i] = new Tcontrol_t [_param->_nb_context [i]]; 273 274 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 275 ALLOC1(_rob ,std::list<entry_t*>,_param->_nb_bank); 278 ALLOC1(reg_BANK_PTR ,uint32_t ,_param->_nb_bank); 279 280 ALLOC2(reg_NB_INST_COMMIT_ALL ,Tcounter_t ,_param->_nb_front_end,_param->_nb_context [it1]); 281 ALLOC2(reg_NB_INST_COMMIT_MEM ,Tcounter_t ,_param->_nb_front_end,_param->_nb_context [it1]); 276 282 277 ALLOC1(reg_BANK_PTR ,uint32_t ,_param->_nb_bank); 278 279 ALLOC2(reg_NB_INST_COMMIT_ALL ,Tcounter_t ,_param->_nb_front_end,_param->_nb_context [it1]); 280 ALLOC2(reg_NB_INST_COMMIT_MEM ,Tcounter_t ,_param->_nb_front_end,_param->_nb_context [it1]); 281 282 ALLOC2(reg_EVENT_STATE ,Tevent_state_t,_param->_nb_front_end,_param->_nb_context [it1]); 283 ALLOC2(reg_EVENT_STATE ,Tevent_state_t,_param->_nb_front_end,_param->_nb_context [it1]); 284 ALLOC2(reg_EVENT_FLUSH ,bool ,_param->_nb_front_end,_param->_nb_context [it1]); 285 286 ALLOC2(reg_PC_PREVIOUS ,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); 287 ALLOC2(reg_PC_CURRENT ,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); 288 ALLOC2(reg_PC_CURRENT_IS_DS ,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); 289 ALLOC2(reg_PC_CURRENT_IS_DS_TAKE,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); 290 ALLOC2(reg_PC_NEXT ,Taddress_t ,_param->_nb_front_end,_param->_nb_context [it1]); 283 291 } 284 292 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp
r101 r104 67 67 DELETE2_SIGNAL(out_RETIRE_CONTEXT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],_param->_size_context_id ); 68 68 // DELETE2_SIGNAL(out_RETIRE_RENAME_UNIT_ID ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],_param->_size_rename_unit_id ); 69 DELETE2_SIGNAL(out_RETIRE_EVENT_STATE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],_param->_size_event_state );70 69 DELETE2_SIGNAL(out_RETIRE_USE_STORE_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],1 ); 71 70 DELETE2_SIGNAL(out_RETIRE_USE_LOAD_QUEUE ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],1 ); … … 87 86 DELETE2_SIGNAL(out_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_rename_unit,_param->_nb_inst_retire[it1],_param->_size_special_register ); 88 87 88 DELETE2_SIGNAL(out_RETIRE_EVENT_VAL ,_param->_nb_front_end,_param->_nb_context[it1],1); 89 DELETE2_SIGNAL( in_RETIRE_EVENT_ACK ,_param->_nb_front_end,_param->_nb_context[it1],1); 90 DELETE2_SIGNAL(out_RETIRE_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_event_state); 91 89 92 DELETE1_SIGNAL( in_COMMIT_VAL ,_param->_nb_inst_commit,1 ); 90 93 DELETE1_SIGNAL(out_COMMIT_ACK ,_param->_nb_inst_commit,1 ); … … 156 159 157 160 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 158 delete [] internal_BANK_INSERT_VAL;159 delete [] internal_BANK_INSERT_NUM_RENAME_UNIT;160 delete [] internal_BANK_INSERT_NUM_INST;161 162 delete [] internal_BANK_COMMIT_VAL;163 delete [] internal_BANK_COMMIT_NUM_INST;164 delete [] internal_BANK_COMMIT_ENTRY;165 166 delete [] internal_BANK_RETIRE_VAL;167 delete [] internal_BANK_RETIRE_NUM_RENAME_UNIT;168 delete [] internal_BANK_RETIRE_NUM_INST;169 170 delete [] internal_REEXECUTE_VAL;171 delete [] internal_REEXECUTE_NUM_BANK;172 173 delete [] internal_BRANCH_COMPLETE_VAL;174 delete [] internal_BRANCH_COMPLETE_NUM_BANK;175 176 for (uint32_t i=0; i<_param->_nb_front_end; i++)177 delete [] internal_EVENT_ACK [i];178 delete [] internal_EVENT_ACK;161 DELETE1(internal_BANK_INSERT_VAL ,_param->_nb_bank); 162 DELETE1(internal_BANK_INSERT_NUM_RENAME_UNIT ,_param->_nb_bank); 163 DELETE1(internal_BANK_INSERT_NUM_INST ,_param->_nb_bank); 164 165 DELETE2(internal_BANK_COMMIT_VAL ,_param->_nb_bank,_param->_nb_bank_access_commit); 166 DELETE2(internal_BANK_COMMIT_NUM_INST ,_param->_nb_bank,_param->_nb_bank_access_commit); 167 DELETE2(internal_BANK_COMMIT_ENTRY ,_param->_nb_bank,_param->_nb_bank_access_commit); 168 169 DELETE1(internal_BANK_RETIRE_VAL ,_param->_nb_bank); 170 DELETE1(internal_BANK_RETIRE_NUM_RENAME_UNIT ,_param->_nb_bank); 171 DELETE1(internal_BANK_RETIRE_NUM_INST ,_param->_nb_bank); 172 173 DELETE1(internal_REEXECUTE_VAL ,_param->_nb_inst_reexecute); 174 DELETE1(internal_REEXECUTE_NUM_BANK ,_param->_nb_inst_reexecute); 175 176 DELETE1(internal_BRANCH_COMPLETE_VAL ,_param->_nb_inst_branch_complete); 177 DELETE1(internal_BRANCH_COMPLETE_NUM_BANK ,_param->_nb_inst_branch_complete); 178 179 DELETE2(internal_EVENT_ACK ,_param->_nb_front_end,_param->_nb_context [it1]); 180 181 DELETE2(internal_RETIRE_EVENT_VAL ,_param->_nb_front_end,_param->_nb_context[it1]); 179 182 180 183 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 181 DELETE1(_rob ,_param->_nb_bank); 182 DELETE1(reg_BANK_PTR ,_param->_nb_bank); 183 DELETE2(reg_NB_INST_COMMIT_ALL ,_param->_nb_front_end,_param->_nb_context [it1]); 184 DELETE2(reg_NB_INST_COMMIT_MEM ,_param->_nb_front_end,_param->_nb_context [it1]); 185 DELETE2(reg_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context [it1]); 184 DELETE1(_rob ,_param->_nb_bank); 185 DELETE1(reg_BANK_PTR ,_param->_nb_bank); 186 DELETE2(reg_NB_INST_COMMIT_ALL ,_param->_nb_front_end,_param->_nb_context [it1]); 187 DELETE2(reg_NB_INST_COMMIT_MEM ,_param->_nb_front_end,_param->_nb_context [it1]); 188 DELETE2(reg_EVENT_STATE ,_param->_nb_front_end,_param->_nb_context [it1]); 189 DELETE2(reg_EVENT_FLUSH ,_param->_nb_front_end,_param->_nb_context [it1]); 190 DELETE2(reg_PC_PREVIOUS ,_param->_nb_front_end,_param->_nb_context [it1]); 191 DELETE2(reg_PC_CURRENT ,_param->_nb_front_end,_param->_nb_context [it1]); 192 DELETE2(reg_PC_CURRENT_IS_DS ,_param->_nb_front_end,_param->_nb_context [it1]); 193 DELETE2(reg_PC_CURRENT_IS_DS_TAKE,_param->_nb_front_end,_param->_nb_context [it1]); 194 DELETE2(reg_PC_NEXT ,_param->_nb_front_end,_param->_nb_context [it1]); 186 195 } 187 196 … … 199 208 }; // end namespace multi_ooo_engine 200 209 }; // end namespace core 201 202 210 }; // end namespace behavioural 203 211 }; // end namespace morpheo -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMealy_retire.cpp
r100 r104 35 35 Tcontrol_t spr_write_sr_ov_val [_param->_nb_front_end][_param->_max_nb_context]; 36 36 Tcontrol_t spr_write_sr_ov [_param->_nb_front_end][_param->_max_nb_context]; 37 38 37 39 38 // Initialisation … … 148 147 PORT_WRITE(out_RETIRE_CONTEXT_ID [x][y], context_id ); 149 148 // PORT_WRITE(out_RETIRE_RENAME_UNIT_ID [x][y], entry->rename_unit_id ); 150 PORT_WRITE(out_RETIRE_EVENT_STATE [x][y], reg_EVENT_STATE[front_end_id][context_id]);151 149 PORT_WRITE(out_RETIRE_USE_STORE_QUEUE [x][y], entry->use_store_queue ); 152 150 PORT_WRITE(out_RETIRE_USE_LOAD_QUEUE [x][y], entry->use_load_queue ); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMoore.cpp
r100 r104 143 143 } 144 144 145 // =================================================================== 146 // =====[ RETIRE_EVENT ]============================================== 147 // =================================================================== 148 for (uint32_t i=0; i<_param->_nb_front_end; i++) 149 for (uint32_t j=0; j<_param->_nb_context [i]; j++) 150 PORT_WRITE(out_RETIRE_EVENT_STATE [i][j], reg_EVENT_STATE[i][j]); 145 151 146 152 log_end(Commit_unit,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp
r101 r104 41 41 for (uint32_t j=0; j<_param->_nb_context [i]; j++) 42 42 { 43 reg_NB_INST_COMMIT_ALL [i][j] = 0; 44 reg_NB_INST_COMMIT_MEM [i][j] = 0; 45 46 reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; 43 reg_NB_INST_COMMIT_ALL [i][j] = 0; 44 reg_NB_INST_COMMIT_MEM [i][j] = 0; 45 46 reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; 47 reg_EVENT_FLUSH [i][j] = false; 48 49 // reg_PC_PREVIOUS [i][j] = (0x100-4)>>2; 50 reg_PC_CURRENT [i][j] = (0x100 )>>2; 51 reg_PC_CURRENT_IS_DS [i][j] = 0; 52 reg_PC_CURRENT_IS_DS_TAKE [i][j] = 0; 53 // reg_PC_NEXT [i][j] = (0x100+4)>>2; 47 54 } 48 55 … … 62 69 switch (reg_EVENT_STATE [i][j]) 63 70 { 64 case EVENT_STATE_EVENT : reg_EVENT_STATE [i][j] = EVENT_STATE_WAITEND ; break; 65 case EVENT_STATE_END : reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; break; 71 case EVENT_STATE_EVENT : 72 { 73 if (internal_RETIRE_EVENT_VAL [i][j] and in_RETIRE_EVENT_ACK [i][j]) 74 reg_EVENT_STATE [i][j] = EVENT_STATE_WAITEND ; 75 break; 76 } 77 case EVENT_STATE_WAITEND : 78 { 79 if (reg_NB_INST_COMMIT_ALL [i][j] == 0) 80 { 81 reg_EVENT_STATE [i][j] = EVENT_STATE_END; 82 reg_EVENT_FLUSH [i][j] = false; 83 } 84 break; 85 } 86 case EVENT_STATE_END : 87 { 88 reg_EVENT_STATE [i][j] = EVENT_STATE_NO_EVENT; 89 break; 90 } 66 91 // case EVENT_STATE_NO_EVENT : 67 // case EVENT_STATE_WAITEND :68 92 default : break; 69 93 } … … 324 348 { 325 349 reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_EVENT; 326 327 // !!!!!!!!!!! Compute address 350 reg_EVENT_FLUSH [front_end_id][context_id] = true; 351 352 // TODO Compute address !!!!!!!!!!! 328 353 } 329 354 … … 332 357 if (type == TYPE_MEMORY) 333 358 reg_NB_INST_COMMIT_MEM [front_end_id][context_id] --; 334 335 if (reg_NB_INST_COMMIT_ALL [front_end_id][context_id] == 0)336 reg_EVENT_STATE [front_end_id][context_id] = EVENT_STATE_END;337 359 338 360 reg_NUM_BANK_HEAD = (reg_NUM_BANK_HEAD+1)%_param->_nb_bank; … … 416 438 417 439 Tdepth_t depth_min = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN[front_end_id][context_id]):0; 418 Tdepth_t depth_max = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX[front_end_id][context_id]):0;419 Tcontrol_t depth_full = PORT_READ(in_DEPTH_FULL [front_end_id][context_id]);440 // Tdepth_t depth_max = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MAX[front_end_id][context_id]):0; 441 // Tcontrol_t depth_full = PORT_READ(in_DEPTH_FULL [front_end_id][context_id]); 420 442 421 443 // is a valid instruction ? … … 433 455 // ....... max ...X... min ....... KO 434 456 435 Tcontrol_t is_valid = ((depth == depth_min) or 436 depth_full or 437 ((depth_min <= depth_max)? 438 ((depth >= depth_min) and (depth <=depth_max)): 439 ((depth >= depth_min) or (depth <=depth_max)))); 457 // Tcontrol_t is_valid = ((depth == depth_min) or 458 // depth_full or 459 // ((depth_min <= depth_max)? 460 // ((depth >= depth_min) and (depth <=depth_max)): 461 // ((depth >= depth_min) or (depth <=depth_max)))); 462 463 bool flush = reg_EVENT_FLUSH [front_end_id][context_id]; 464 Tcontrol_t is_valid = ((depth == depth_min) and not flush); 440 465 441 466 log_printf(TRACE,Commit_unit,FUNCTION," * HEAD [%d]",i); … … 443 468 log_printf(TRACE,Commit_unit,FUNCTION," * depth : %d",depth ); 444 469 log_printf(TRACE,Commit_unit,FUNCTION," * depth_min : %d",depth_min); 445 log_printf(TRACE,Commit_unit,FUNCTION," * depth_max : %d",depth_max); 470 // log_printf(TRACE,Commit_unit,FUNCTION," * depth_max : %d",depth_max); 471 log_printf(TRACE,Commit_unit,FUNCTION," * flush : %d",flush); 446 472 447 473 //------------------------------------------------------ … … 522 548 for (uint32_t i=0; i<_param->_nb_front_end; i++) 523 549 for (uint32_t j=0; j<_param->_nb_context [i]; j++) 524 log_printf(TRACE,Commit_unit,FUNCTION," * num_inst[%d][%d] all : %d, mem : %d",i,j,reg_NB_INST_COMMIT_ALL[i][j],reg_NB_INST_COMMIT_MEM[i][j]); 550 { 551 log_printf(TRACE,Commit_unit,FUNCTION," * [%d][%d] num_inst_all : %d, num_inst_mem : %d",i,j,reg_NB_INST_COMMIT_ALL[i][j],reg_NB_INST_COMMIT_MEM[i][j]); 552 log_printf(TRACE,Commit_unit,FUNCTION," * [%d][%d] state : %s",i,j,toString(reg_EVENT_STATE [i][j]).c_str()); 553 } 525 554 526 555 for (uint32_t i=0; i<_param->_nb_bank; i++) 527 556 { 528 log_printf(TRACE,Commit_unit,FUNCTION," * Bank [%d] size : %d, ptr : %d",i,(int)_rob[i].size(), reg_BANK_PTR [i]);557 log_printf(TRACE,Commit_unit,FUNCTION," * Bank [%d] size : %d, ptr : %d",i,(int)_rob[i].size(), reg_BANK_PTR [i]); 529 558 530 559 #ifdef STATISTICS -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/src/test.cpp
r88 r104 81 81 ALLOC1_SC_SIGNAL( in_RETIRE_FRONT_END_ID ," in_RETIRE_FRONT_END_ID ",Tcontext_t ,_param->_nb_inst_retire); 82 82 ALLOC1_SC_SIGNAL( in_RETIRE_CONTEXT_ID ," in_RETIRE_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_retire); 83 ALLOC1_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_inst_retire);84 83 ALLOC1_SC_SIGNAL( in_RETIRE_WRITE_RD ," in_RETIRE_WRITE_RD ",Tcontrol_t ,_param->_nb_inst_retire); 85 84 ALLOC1_SC_SIGNAL( in_RETIRE_WRITE_RE ," in_RETIRE_WRITE_RE ",Tcontrol_t ,_param->_nb_inst_retire); … … 90 89 ALLOC1_SC_SIGNAL(out_RETIRE_RESTORE_RD_PHY_OLD,"out_RETIRE_RESTORE_RD_PHY_OLD",Tcontrol_t ,_param->_nb_inst_retire); 91 90 ALLOC1_SC_SIGNAL(out_RETIRE_RESTORE_RE_PHY_OLD,"out_RETIRE_RESTORE_RE_PHY_OLD",Tcontrol_t ,_param->_nb_inst_retire); 91 92 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_VAL ," in_RETIRE_EVENT_VAL ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 93 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,"out_RETIRE_EVENT_ACK ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 94 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_front_end,_param->_nb_context[it1]); 92 95 93 96 /******************************************************** … … 136 139 if (_param->_have_port_context_id) 137 140 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_CONTEXT_ID ,_param->_nb_inst_retire); 138 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_EVENT_STATE ,_param->_nb_inst_retire);139 141 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_WRITE_RD ,_param->_nb_inst_retire); 140 142 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_WRITE_RE ,_param->_nb_inst_retire); … … 145 147 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_RESTORE_RD_PHY_OLD,_param->_nb_inst_retire); 146 148 INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_RESTORE_RE_PHY_OLD,_param->_nb_inst_retire); 149 150 INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 151 INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 152 INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 147 153 148 154 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 192 198 SC_START(0); 193 199 LABEL("Initialisation"); 200 201 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 202 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 203 in_RETIRE_EVENT_VAL [i][j]->write(1); 194 204 195 205 LABEL("Reset"); … … 251 261 252 262 Tcontext_t front_end_id = rand() % _param->_nb_front_end; 263 Tcontext_t context_id = rand() % (_param->_nb_context[front_end_id]); 253 264 254 265 in_RETIRE_VAL [i]->write(val); 255 266 in_RETIRE_FRONT_END_ID [i]->write(front_end_id); 256 in_RETIRE_CONTEXT_ID [i]->write(rand() % (_param->_nb_context[front_end_id])); 257 in_RETIRE_EVENT_STATE [i]->write(EVENT_STATE_NO_EVENT); 267 in_RETIRE_CONTEXT_ID [i]->write(context_id); 258 268 in_RETIRE_WRITE_RD [i]->write(rand() % 2); 259 269 in_RETIRE_WRITE_RE [i]->write(rand() % 2); … … 262 272 in_RETIRE_NUM_REG_RD_PHY_OLD [i]->write(rand() % _param->_nb_general_register); 263 273 in_RETIRE_NUM_REG_RE_PHY_OLD [i]->write(rand() % _param->_nb_special_register); 274 275 in_RETIRE_EVENT_STATE [front_end_id][context_id]->write(EVENT_STATE_NO_EVENT); 264 276 } 265 277 … … 332 344 in_RETIRE_FRONT_END_ID [i]->write(retire_front_end_id [i]); 333 345 in_RETIRE_CONTEXT_ID [i]->write(retire_context_id [i]); 334 in_RETIRE_EVENT_STATE [i]->write(EVENT_STATE_EVENT);335 346 in_RETIRE_WRITE_RD [i]->write(0); 336 347 in_RETIRE_WRITE_RE [i]->write(0); 337 348 349 in_RETIRE_EVENT_STATE [retire_front_end_id [i]][retire_context_id [i]]->write(EVENT_STATE_EVENT); 350 338 351 do 339 352 { … … 389 402 in_RETIRE_FRONT_END_ID [i]->write(retire_front_end_id [i]); 390 403 in_RETIRE_CONTEXT_ID [i]->write(retire_context_id [i]); 391 in_RETIRE_EVENT_STATE [i]->write(EVENT_STATE_WAITEND);392 404 in_RETIRE_WRITE_RD [i]->write(rand() % 2); 393 405 in_RETIRE_WRITE_RE [i]->write(rand() % 2); … … 396 408 in_RETIRE_NUM_REG_RD_PHY_OLD [i]->write(rand() % _param->_nb_general_register); 397 409 in_RETIRE_NUM_REG_RE_PHY_OLD [i]->write(rand() % _param->_nb_special_register); 410 411 in_RETIRE_EVENT_STATE [retire_front_end_id [i]][retire_context_id [i]]->write(EVENT_STATE_WAITEND); 398 412 } 399 413 … … 517 531 if (_param->_have_port_context_id) 518 532 delete [] in_RETIRE_CONTEXT_ID ; 519 delete [] in_RETIRE_EVENT_STATE ;520 533 delete [] in_RETIRE_WRITE_RD ; 521 534 delete [] in_RETIRE_WRITE_RE ; … … 527 540 delete [] out_RETIRE_RESTORE_RE_PHY_OLD; 528 541 542 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 543 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 544 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 529 545 #endif 530 546 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h
r88 r104 96 96 public : SC_IN (Tcontext_t ) ** in_RETIRE_FRONT_END_ID ;//[nb_inst_retire] 97 97 public : SC_IN (Tcontext_t ) ** in_RETIRE_CONTEXT_ID ;//[nb_inst_retire] 98 public : SC_IN (Tevent_state_t ) ** in_RETIRE_EVENT_STATE ;//[nb_inst_retire]99 98 public : SC_IN (Tcontrol_t ) ** in_RETIRE_WRITE_RD ;//[nb_inst_retire] 100 99 public : SC_IN (Tcontrol_t ) ** in_RETIRE_WRITE_RE ;//[nb_inst_retire] … … 105 104 public : SC_OUT(Tcontrol_t ) ** out_RETIRE_RESTORE_RD_PHY_OLD;//[nb_inst_retire] 106 105 public : SC_OUT(Tcontrol_t ) ** out_RETIRE_RESTORE_RE_PHY_OLD;//[nb_inst_retire] 106 107 // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 public : SC_IN (Tcontrol_t ) *** in_RETIRE_EVENT_VAL ;//[nb_front_end][nb_context] 109 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_EVENT_ACK ;//[nb_front_end][nb_context] 110 public : SC_IN (Tevent_state_t ) *** in_RETIRE_EVENT_STATE ;//[nb_front_end][nb_context] 107 111 108 112 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 118 122 private : Tcontrol_t * internal_INSERT_ACK; //[nb_inst_insert] 119 123 private : Tcontrol_t * internal_RETIRE_ACK; //[nb_inst_retire] 124 public : Tcontrol_t ** internal_RETIRE_EVENT_ACK ;//[nb_front_end][nb_context] 120 125 121 126 private : bool *** internal_rat_gpr_update_table; //[nb_front_end][nb_context][nb_general_register_logic] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit.cpp
r100 r104 84 84 PORT_WRITE(out_INSERT_ACK[i],internal_INSERT_ACK [i]); 85 85 } 86 86 87 for (uint32_t i=0; i<_param->_nb_inst_retire; i++) 87 88 { … … 90 91 PORT_WRITE(out_RETIRE_ACK[i],internal_RETIRE_ACK [i]); 91 92 } 93 94 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 95 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 96 { 97 internal_RETIRE_EVENT_ACK [i][j] = 1; 98 99 PORT_WRITE(out_RETIRE_EVENT_ACK[i][j],internal_RETIRE_EVENT_ACK [i][j]); 100 } 92 101 93 102 log_printf(INFO,Register_Address_Translation_unit,FUNCTION,"Method - transition"); … … 119 128 << (*(in_RENAME_NUM_REG_RD_LOG [i])) 120 129 << (*(in_RENAME_NUM_REG_RE_LOG [i])); 121 } 122 130 } 123 131 124 132 # ifdef SYSTEMCASS_SPECIFIC … … 138 146 sensitive << (*(in_RETIRE_CONTEXT_ID [i])); 139 147 140 sensitive << (*(in_RETIRE_EVENT_STATE [i])) 141 << (*(in_RETIRE_WRITE_RD [i])) 148 sensitive << (*(in_RETIRE_WRITE_RD [i])) 142 149 << (*(in_RETIRE_WRITE_RE [i])) 143 150 << (*(in_RETIRE_NUM_REG_RD_LOG [i])) 144 151 << (*(in_RETIRE_NUM_REG_RE_LOG [i])); 145 152 } 153 154 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 155 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 156 sensitive << (*(in_RETIRE_EVENT_STATE [i][j])); 146 157 147 158 # ifdef SYSTEMCASS_SPECIFIC -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_allocation.cpp
r88 r104 7 7 8 8 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h" 9 #include "Behavioural/include/Allocation.h" 9 10 #include "Behavioural/include/Allocation.h" 10 11 … … 100 101 ALLOC1_SIGNAL_IN ( in_RETIRE_FRONT_END_ID ,"front_end_id" ,Tcontext_t ,_param->_size_front_end_id); 101 102 ALLOC1_SIGNAL_IN ( in_RETIRE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id ); 102 ALLOC1_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"event_state" ,Tevent_state_t ,_param->_size_event_state );103 103 ALLOC1_SIGNAL_IN ( in_RETIRE_WRITE_RD ,"write_rd" ,Tcontrol_t ,1); 104 104 ALLOC1_SIGNAL_IN ( in_RETIRE_WRITE_RE ,"write_re" ,Tcontrol_t ,1); … … 111 111 } 112 112 113 // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 114 { 115 ALLOC2_INTERFACE("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]); 116 117 _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_VAL ,VAL,_param->_nb_front_end, _param->_nb_context[it1]); 118 _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_ACK ,ACK,_param->_nb_front_end, _param->_nb_context[it1]); 119 _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"state" ,Tevent_state_t ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]); 120 } 121 113 122 if (usage_is_set(_usage,USE_SYSTEMC)) 114 123 { 115 internal_RENAME_ACK = new Tcontrol_t [_param->_nb_inst_insert]; 116 internal_INSERT_ACK = new Tcontrol_t [_param->_nb_inst_insert]; 117 internal_RETIRE_ACK = new Tcontrol_t [_param->_nb_inst_retire]; 124 ALLOC1(internal_RENAME_ACK ,Tcontrol_t,_param->_nb_inst_insert); 125 ALLOC1(internal_INSERT_ACK ,Tcontrol_t,_param->_nb_inst_insert); 126 ALLOC1(internal_RETIRE_ACK ,Tcontrol_t,_param->_nb_inst_retire); 127 ALLOC2(internal_RETIRE_EVENT_ACK ,Tcontrol_t,_param->_nb_front_end,_param->_nb_context[it1]); 118 128 119 129 rat_gpr = new Tgeneral_address_t ** [_param->_nb_front_end]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_deallocation.cpp
r88 r104 7 7 8 8 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h" 9 #include "Behavioural/include/Allocation.h" 9 10 10 11 namespace morpheo { … … 65 66 if (_param->_have_port_context_id) 66 67 delete [] in_RETIRE_CONTEXT_ID ; 67 delete [] in_RETIRE_EVENT_STATE ;68 68 delete [] in_RETIRE_WRITE_RD ; 69 69 delete [] in_RETIRE_WRITE_RE ; … … 75 75 delete [] out_RETIRE_RESTORE_RE_PHY_OLD; 76 76 77 delete [] internal_RENAME_ACK; 78 delete [] internal_INSERT_ACK; 79 delete [] internal_RETIRE_ACK; 77 DELETE1(internal_RENAME_ACK ,_param->_nb_inst_insert); 78 DELETE1(internal_INSERT_ACK ,_param->_nb_inst_insert); 79 DELETE1(internal_RETIRE_ACK ,_param->_nb_inst_retire); 80 DELETE2(internal_RETIRE_EVENT_ACK ,_param->_nb_front_end,_param->_nb_context[it1]); 81 82 DELETE2_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1],1); 83 DELETE2_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1],1); 84 DELETE2_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state); 80 85 81 86 delete [] rat_gpr ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_genMealy_retire.cpp
r88 r104 43 43 44 44 // init -> need't restore old value 45 Tcontrol_t retire_restore_rd_phy_old = false; 46 Tcontrol_t retire_restore_re_phy_old = false; 47 Tevent_state_t event_state = PORT_READ(in_RETIRE_EVENT_STATE [i]); 45 Tcontrol_t retire_restore_rd_phy_old = false; 46 Tcontrol_t retire_restore_re_phy_old = false; 47 48 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RETIRE_FRONT_END_ID [i]):0; 49 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_RETIRE_CONTEXT_ID [i]):0; 48 50 49 51 // Test if event -> need restore ? 50 if ( event_state!= EVENT_STATE_NO_EVENT)52 if (PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]) != EVENT_STATE_NO_EVENT) 51 53 { 52 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RETIRE_FRONT_END_ID [i]):0;53 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_RETIRE_CONTEXT_ID [i]):0;54 55 54 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * Have event"); 56 55 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * front_end_id : %d",front_end_id); 57 56 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * context_id : %d",context_id ); 58 57 59 // Test if event have just occure -> reset update_table60 if (event_state == EVENT_STATE_EVENT)61 {62 // Reset update_table63 for (uint32_t j=0; j<_param->_nb_general_register_logic; j++)64 internal_rat_gpr_update_table[front_end_id][context_id][j] = 0;65 for (uint32_t j=0; j<_param->_nb_special_register_logic; j++)66 internal_rat_spr_update_table[front_end_id][context_id][j] = 0;67 }68 69 58 // Test and update update table 70 59 if (PORT_READ(in_RETIRE_WRITE_RD [i])) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Register_Address_Translation_unit_transition.cpp
r100 r104 60 60 if (PORT_READ(in_INSERT_VAL [i]) and internal_INSERT_ACK [i]) 61 61 { 62 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * INSERT [%d]",i); 63 62 64 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RENAME_FRONT_END_ID [i]):0; 63 65 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_RENAME_CONTEXT_ID [i]):0; … … 71 73 72 74 // ===================================================== 75 // ====[ RETIRE_EVENT ]================================= 76 // ===================================================== 77 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 78 for (uint32_t j=0; j<_param->_nb_context[i]; ++j) 79 if (PORT_READ(in_RETIRE_EVENT_VAL [i][j]) and internal_RETIRE_EVENT_ACK [i][j]) 80 // Test if event have just occure 81 if (PORT_READ(in_RETIRE_EVENT_STATE [i][j]) == EVENT_STATE_EVENT) 82 { 83 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * Reset Update Table"); 84 85 // Reset update_table 86 for (uint32_t k=0; k<_param->_nb_general_register_logic; k++) 87 rat_gpr_update_table [i][j][k] = 0; 88 for (uint32_t k=0; k<_param->_nb_special_register_logic; k++) 89 rat_spr_update_table [i][j][k] = 0; 90 } 91 92 // ===================================================== 73 93 // ====[ RETIRE ]======================================= 74 94 // ===================================================== … … 78 98 if (PORT_READ(in_RETIRE_VAL [i]) and internal_RETIRE_ACK [i]) 79 99 { 100 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * RETIRE [%d]",i); 101 80 102 // if no event : no effect, because the RAT content the most recently register 81 103 // but if they have a event (exception or miss speculation), the rat must restore the oldest value 82 104 // To restore the oldest valid value, we use the rat_update_table. if the bit is unset, also they have none update on this register 83 105 // the retire interface became of the Re Order Buffer, also is in program sequence ! 84 if (PORT_READ(in_RETIRE_EVENT_STATE [i]) != EVENT_STATE_NO_EVENT) 106 107 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RETIRE_FRONT_END_ID [i]):0; 108 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_RETIRE_CONTEXT_ID [i]):0; 109 Tevent_state_t event_state = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]); 110 111 if (event_state != EVENT_STATE_NO_EVENT) 85 112 { 86 Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RETIRE_FRONT_END_ID [i]):0; 87 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_RETIRE_CONTEXT_ID [i]):0; 88 89 // Test if event have just occure 90 if (PORT_READ(in_RETIRE_EVENT_STATE [i]) == EVENT_STATE_EVENT) 91 { 92 // Reset update_table 93 for (uint32_t j=0; j<_param->_nb_general_register_logic; j++) 94 rat_gpr_update_table[front_end_id][context_id][j] = 0; 95 for (uint32_t j=0; j<_param->_nb_special_register_logic; j++) 96 rat_spr_update_table[front_end_id][context_id][j] = 0; 97 } 113 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * front_end_id : %d",front_end_id); 114 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * context_id : %d",context_id); 115 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * event_state : %d",event_state); 98 116 99 117 // Test if write and have not a previous update … … 102 120 Tgeneral_address_t rd_log = PORT_READ(in_RETIRE_NUM_REG_RD_LOG [i]); 103 121 104 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * retire[%d]",i); 105 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * front_end_id : %d",front_end_id); 106 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * context_id : %d",context_id ); 107 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * rd_log : %d",rd_log ); 122 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * retire RD"); 123 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * rd_log : %d",rd_log); 108 124 109 125 // if (RETIRE_RESTORE_RD_PHY_OLD [i]) 110 if (rat_gpr_update_table [front_end_id][context_id][rd_log] == 0)111 { 112 rat_gpr [front_end_id][context_id][rd_log] = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_OLD [i]);113 rat_gpr_update_table [front_end_id][context_id][rd_log] = 1;126 if (rat_gpr_update_table [front_end_id][context_id][rd_log] == 0) 127 { 128 rat_gpr [front_end_id][context_id][rd_log] = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_OLD [i]); 129 rat_gpr_update_table [front_end_id][context_id][rd_log] = 1; 114 130 } 115 131 } … … 119 135 Tspecial_address_t re_log = PORT_READ(in_RETIRE_NUM_REG_RE_LOG [i]); 120 136 137 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * retire RE"); 138 log_printf(TRACE,Register_Address_Translation_unit,FUNCTION," * re_log : %d",re_log); 139 121 140 // if (RETIRE_RESTORE_RE_PHY_OLD [i]) 122 if (rat_spr_update_table [front_end_id][context_id][re_log] == 0)123 { 124 rat_spr [front_end_id][context_id][re_log] = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_OLD [i]);125 rat_spr_update_table [front_end_id][context_id][re_log] = 1;141 if (rat_spr_update_table [front_end_id][context_id][re_log] == 0) 142 { 143 rat_spr [front_end_id][context_id][re_log] = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_OLD [i]); 144 rat_spr_update_table [front_end_id][context_id][re_log] = 1; 126 145 } 127 146 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/SelfTest/src/test.cpp
r88 r104 91 91 ALLOC1_SC_SIGNAL( in_RETIRE_FRONT_END_ID ," in_RETIRE_FRONT_END_ID ",Tcontext_t ,_param->_nb_inst_retire); 92 92 ALLOC1_SC_SIGNAL( in_RETIRE_CONTEXT_ID ," in_RETIRE_CONTEXT_ID ",Tcontext_t ,_param->_nb_inst_retire); 93 ALLOC1_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_inst_retire);94 93 ALLOC1_SC_SIGNAL( in_RETIRE_READ_RA ," in_RETIRE_READ_RA ",Tcontrol_t ,_param->_nb_inst_retire); 95 94 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RA_PHY ," in_RETIRE_NUM_REG_RA_PHY ",Tgeneral_address_t,_param->_nb_inst_retire); … … 106 105 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_OLD," in_RETIRE_NUM_REG_RE_PHY_OLD",Tspecial_address_t,_param->_nb_inst_retire); 107 106 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW," in_RETIRE_NUM_REG_RE_PHY_NEW",Tspecial_address_t,_param->_nb_inst_retire); 107 108 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_VAL ," in_RETIRE_EVENT_VAL ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 109 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,"out_RETIRE_EVENT_ACK ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 110 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_front_end,_param->_nb_context[it1]); 108 111 109 112 /******************************************************** … … 163 166 if (_param->_have_port_context_id) 164 167 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_CONTEXT_ID ,_param->_nb_inst_retire); 165 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_EVENT_STATE ,_param->_nb_inst_retire);166 168 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_READ_RA ,_param->_nb_inst_retire); 167 169 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_NUM_REG_RA_PHY ,_param->_nb_inst_retire); … … 178 180 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_NUM_REG_RE_PHY_OLD,_param->_nb_inst_retire); 179 181 INSTANCE1_SC_SIGNAL(_Register_translation_unit, in_RETIRE_NUM_REG_RE_PHY_NEW,_param->_nb_inst_retire); 182 183 INSTANCE2_SC_SIGNAL(_Register_translation_unit, in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 184 INSTANCE2_SC_SIGNAL(_Register_translation_unit,out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 185 INSTANCE2_SC_SIGNAL(_Register_translation_unit, in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 180 186 181 187 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 264 270 delete [] in_RETIRE_FRONT_END_ID ; 265 271 delete [] in_RETIRE_CONTEXT_ID ; 266 delete [] in_RETIRE_EVENT_STATE ;267 272 delete [] in_RETIRE_READ_RA ; 268 273 delete [] in_RETIRE_NUM_REG_RA_PHY ; … … 279 284 delete [] in_RETIRE_NUM_REG_RE_PHY_OLD; 280 285 delete [] in_RETIRE_NUM_REG_RE_PHY_NEW; 286 287 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 288 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 289 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 281 290 #endif 282 291 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h
r82 r104 111 111 public : SC_IN (Tcontext_t ) ** in_RETIRE_FRONT_END_ID ;//[nb_inst_retire] 112 112 public : SC_IN (Tcontext_t ) ** in_RETIRE_CONTEXT_ID ;//[nb_inst_retire] 113 public : SC_IN (Tevent_state_t ) ** in_RETIRE_EVENT_STATE ;//[nb_inst_retire]114 113 public : SC_IN (Tcontrol_t ) ** in_RETIRE_READ_RA ;//[nb_inst_retire] 115 114 public : SC_IN (Tgeneral_address_t) ** in_RETIRE_NUM_REG_RA_PHY ;//[nb_inst_retire] … … 127 126 public : SC_IN (Tspecial_address_t) ** in_RETIRE_NUM_REG_RE_PHY_NEW;//[nb_inst_retire] 128 127 128 // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 129 public : SC_IN (Tcontrol_t ) *** in_RETIRE_EVENT_VAL ;//[nb_front_end][nb_context] 130 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_EVENT_ACK ;//[nb_front_end][nb_context] 131 public : SC_IN (Tevent_state_t ) *** in_RETIRE_EVENT_STATE ;//[nb_front_end][nb_context] 132 129 133 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 130 134 public : morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Dependency_checking_unit * _component_dependency_checking_unit; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp
r98 r104 110 110 ALLOC1_SIGNAL_IN ( in_RETIRE_FRONT_END_ID ,"front_end_id" ,Tcontext_t ,_param->_size_front_end_id ); 111 111 ALLOC1_SIGNAL_IN ( in_RETIRE_CONTEXT_ID ,"context_id" ,Tcontext_t ,_param->_size_context_id ); 112 ALLOC1_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"event_state" ,Tevent_state_t ,_param->_size_event_state );113 112 ALLOC1_SIGNAL_IN ( in_RETIRE_READ_RA ,"read_ra" ,Tcontrol_t ,1 ); 114 113 ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RA_PHY ,"num_reg_ra_phy" ,Tgeneral_address_t,_param->_size_general_register ); … … 126 125 ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_PHY_NEW,"num_reg_re_phy_new",Tspecial_address_t,_param->_size_special_register ); 127 126 } 127 128 // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 129 { 130 ALLOC2_INTERFACE("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]); 131 132 _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_VAL ,VAL,_param->_nb_front_end, _param->_nb_context[it1]); 133 _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_ACK ,ACK,_param->_nb_front_end, _param->_nb_context[it1]); 134 _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"state" ,Tevent_state_t ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]); 135 } 136 128 137 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 129 138 std::string name; … … 329 338 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_CONTEXT_ID" , 330 339 dest, "in_RETIRE_"+toString(i)+"_CONTEXT_ID" ); 331 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_EVENT_STATE" ,332 dest, "in_RETIRE_"+toString(i)+"_EVENT_STATE" );333 340 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_WRITE_RD" , 334 341 dest, "in_RETIRE_"+toString(i)+"_WRITE_RD" ); … … 356 363 dest, "in_RETIRE_"+toString(i)+"_RESTORE_RE_PHY_OLD"); 357 364 } 365 366 for (uint32_t i=0; i<_param->_nb_front_end; i++) 367 for (uint32_t j=0; j<_param->_nb_context[i]; j++) 368 { 369 dest = _name; 370 371 #ifdef POSITION 372 _component->interface_map (src ,"retire_event_"+toString(i)+"_"+toString(j), 373 dest,"retire_event_"+toString(i)+"_"+toString(j)); 374 #endif 375 PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL" , 376 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL" ); 377 PORT_MAP(_component,src ,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK" , 378 dest,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK" ); 379 PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE", 380 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE"); 381 } 358 382 } 359 383 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_deallocation.cpp
r88 r104 7 7 8 8 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h" 9 #include "Behavioural/include/Allocation.h" 9 10 10 11 namespace morpheo { … … 75 76 if (_param->_have_port_context_id) 76 77 delete [] in_RETIRE_CONTEXT_ID ; 77 delete [] in_RETIRE_EVENT_STATE ;78 78 delete [] in_RETIRE_READ_RA ; 79 79 delete [] in_RETIRE_NUM_REG_RA_PHY ; … … 90 90 delete [] in_RETIRE_NUM_REG_RE_PHY_OLD; 91 91 delete [] in_RETIRE_NUM_REG_RE_PHY_NEW; 92 93 DELETE2_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1],1); 94 DELETE2_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1],1); 95 DELETE2_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state); 92 96 } 97 93 98 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 94 99 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/src/test.cpp
r88 r104 115 115 ALLOC1_SC_SIGNAL( in_RETIRE_STORE_QUEUE_PTR_WRITE," in_RETIRE_STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t ,_param->_nb_inst_retire); 116 116 ALLOC1_SC_SIGNAL( in_RETIRE_LOAD_QUEUE_PTR_WRITE ," in_RETIRE_LOAD_QUEUE_PTR_WRITE ",Tlsq_ptr_t ,_param->_nb_inst_retire); 117 ALLOC1_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_inst_retire);118 117 ALLOC1_SC_SIGNAL( in_RETIRE_READ_RA ," in_RETIRE_READ_RA ",Tcontrol_t ,_param->_nb_inst_retire); 119 118 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RA_PHY ," in_RETIRE_NUM_REG_RA_PHY ",Tgeneral_address_t,_param->_nb_inst_retire); … … 130 129 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_OLD ," in_RETIRE_NUM_REG_RE_PHY_OLD ",Tspecial_address_t,_param->_nb_inst_retire); 131 130 ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW ," in_RETIRE_NUM_REG_RE_PHY_NEW ",Tspecial_address_t,_param->_nb_inst_retire); 131 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_VAL ," in_RETIRE_EVENT_VAL ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 132 ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,"out_RETIRE_EVENT_ACK ",Tcontrol_t ,_param->_nb_front_end,_param->_nb_context[it1]); 133 ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_STATE ," in_RETIRE_EVENT_STATE ",Tevent_state_t ,_param->_nb_front_end,_param->_nb_context[it1]); 132 134 ALLOC2_SC_SIGNAL( in_SPR_READ_SR ," in_SPR_READ_SR ",Tspr_t ,_param->_nb_front_end,_param->_nb_context[it1]); 133 135 … … 220 222 if (_param->_have_port_load_queue_ptr) 221 223 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_retire); 222 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_EVENT_STATE ,_param->_nb_inst_retire);223 224 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_READ_RA ,_param->_nb_inst_retire); 224 225 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_NUM_REG_RA_PHY ,_param->_nb_inst_retire); … … 235 236 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_NUM_REG_RE_PHY_OLD ,_param->_nb_inst_retire); 236 237 INSTANCE1_SC_SIGNAL(_Rename_unit, in_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_inst_retire); 238 239 INSTANCE2_SC_SIGNAL(_Rename_unit, in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 240 INSTANCE2_SC_SIGNAL(_Rename_unit,out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 241 INSTANCE2_SC_SIGNAL(_Rename_unit, in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 237 242 238 243 INSTANCE2_SC_SIGNAL(_Rename_unit,in_SPR_READ_SR ,_param->_nb_front_end, _param->_nb_context[it1]); … … 352 357 DELETE1_SC_SIGNAL( in_RETIRE_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_retire); 353 358 DELETE1_SC_SIGNAL( in_RETIRE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_retire); 354 DELETE1_SC_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_inst_retire);355 359 DELETE1_SC_SIGNAL( in_RETIRE_READ_RA ,_param->_nb_inst_retire); 356 360 DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RA_PHY ,_param->_nb_inst_retire); … … 368 372 DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_inst_retire); 369 373 374 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1]); 375 DELETE2_SC_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1]); 376 DELETE2_SC_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1]); 377 370 378 DELETE2_SC_SIGNAL(in_SPR_READ_SR ,_param->_nb_front_end, _param->_nb_context[it1]); 371 379 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/include/Rename_unit.h
r97 r104 140 140 public : SC_IN (Tlsq_ptr_t ) ** in_RETIRE_STORE_QUEUE_PTR_WRITE;//[nb_inst_retire] 141 141 public : SC_IN (Tlsq_ptr_t ) ** in_RETIRE_LOAD_QUEUE_PTR_WRITE ;//[nb_inst_retire] 142 public : SC_IN (Tevent_state_t ) ** in_RETIRE_EVENT_STATE ;//[nb_inst_retire]143 142 public : SC_IN (Tcontrol_t ) ** in_RETIRE_READ_RA ;//[nb_inst_retire] 144 143 public : SC_IN (Tgeneral_address_t) ** in_RETIRE_NUM_REG_RA_PHY ;//[nb_inst_retire] … … 156 155 public : SC_IN (Tspecial_address_t) ** in_RETIRE_NUM_REG_RE_PHY_NEW ;//[nb_inst_retire] 157 156 157 // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 158 public : SC_IN (Tcontrol_t ) *** in_RETIRE_EVENT_VAL ;//[nb_front_end][nb_context] 159 public : SC_OUT(Tcontrol_t ) *** out_RETIRE_EVENT_ACK ;//[nb_front_end][nb_context] 160 public : SC_IN (Tevent_state_t ) *** in_RETIRE_EVENT_STATE ;//[nb_front_end][nb_context] 161 158 162 // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 159 163 public : SC_IN (Tspr_t ) *** in_SPR_READ_SR ;//[nb_front_end][nb_context] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_allocation.cpp
r97 r104 139 139 ALLOC1_SIGNAL_IN ( in_RETIRE_STORE_QUEUE_PTR_WRITE,"store_queue_ptr_write",Tlsq_ptr_t ,_param->_size_store_queue_ptr ); 140 140 ALLOC1_SIGNAL_IN ( in_RETIRE_LOAD_QUEUE_PTR_WRITE ,"load_queue_ptr_write" ,Tlsq_ptr_t ,_param->_size_load_queue_ptr ); 141 ALLOC1_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"event_state" ,Tevent_state_t ,_param->_size_event_state );142 141 ALLOC1_SIGNAL_IN ( in_RETIRE_READ_RA ,"read_ra" ,Tcontrol_t ,1 ); 143 142 ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RA_PHY ,"num_reg_ra_phy" ,Tgeneral_address_t,_param->_size_general_register ); … … 154 153 ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_PHY_OLD ,"num_reg_re_phy_old" ,Tspecial_address_t,_param->_size_special_register ); 155 154 ALLOC1_SIGNAL_IN ( in_RETIRE_NUM_REG_RE_PHY_NEW ,"num_reg_re_phy_new" ,Tspecial_address_t,_param->_size_special_register ); 155 } 156 157 // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 158 { 159 ALLOC2_INTERFACE("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]); 160 161 _ALLOC2_VALACK_IN ( in_RETIRE_EVENT_VAL ,VAL,_param->_nb_front_end, _param->_nb_context[it1]); 162 _ALLOC2_VALACK_OUT(out_RETIRE_EVENT_ACK ,ACK,_param->_nb_front_end, _param->_nb_context[it1]); 163 _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STATE ,"state" ,Tevent_state_t ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]); 156 164 } 157 165 … … 537 545 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_CONTEXT_ID" , 538 546 dest, "in_RETIRE_"+toString(i)+"_CONTEXT_ID" ); 539 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_EVENT_STATE" ,540 dest, "in_RETIRE_"+toString(i)+"_EVENT_STATE" );541 547 PORT_MAP(_component,src , "in_RETIRE_"+toString(i)+"_READ_RA" , 542 548 dest, "in_RETIRE_"+toString(i)+"_READ_RA" ); … … 578 584 COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(i)+"_ACK",dest, "in_RETIRE_"+toString(i)+"_REGISTER_TRANSLATION_ACK"); 579 585 } 586 587 for (uint32_t i=0; i<_param->_nb_front_end; i++) 588 for (uint32_t j=0; j<_param->_nb_context[i]; j++) 589 { 590 dest = _name; 591 592 #ifdef POSITION 593 _component->interface_map (src ,"retire_event_"+toString(i)+"_"+toString(j), 594 dest,"retire_event_"+toString(i)+"_"+toString(j)); 595 #endif 596 PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL" , 597 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_VAL" ); 598 PORT_MAP(_component,src ,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK" , 599 dest,"out_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_ACK" ); 600 PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE", 601 dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE"); 602 } 580 603 } 581 604 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_deallocation.cpp
r88 r104 97 97 DELETE1_SIGNAL( in_RETIRE_STORE_QUEUE_PTR_WRITE,_param->_nb_inst_retire,_param->_size_store_queue_ptr ); 98 98 DELETE1_SIGNAL( in_RETIRE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_inst_retire,_param->_size_load_queue_ptr ); 99 DELETE1_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_inst_retire,_param->_size_event_state );100 99 DELETE1_SIGNAL( in_RETIRE_READ_RA ,_param->_nb_inst_retire,1 ); 101 100 DELETE1_SIGNAL( in_RETIRE_NUM_REG_RA_PHY ,_param->_nb_inst_retire,_param->_size_general_register ); … … 112 111 DELETE1_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_OLD ,_param->_nb_inst_retire,_param->_size_special_register ); 113 112 DELETE1_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW ,_param->_nb_inst_retire,_param->_size_special_register ); 113 114 DELETE2_SIGNAL( in_RETIRE_EVENT_VAL ,_param->_nb_front_end, _param->_nb_context[it1],1); 115 DELETE2_SIGNAL(out_RETIRE_EVENT_ACK ,_param->_nb_front_end, _param->_nb_context[it1],1); 116 DELETE2_SIGNAL( in_RETIRE_EVENT_STATE ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state); 114 117 115 118 DELETE2_SIGNAL(in_SPR_READ_SR ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_spr); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/Parameters.h
r88 r104 81 81 // SPR 82 82 public : bool *** _implement_group ;//[nb_front_end][nb_context][NB_GROUP] 83 84 83 85 84 public : std::vector<uint32_t>*_link_front_end_with_rename_unit ;//[nb_rename_unit] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_allocation.cpp
r101 r104 378 378 379 379 // ~~~~~[ Interface : "rename_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 380 std::vector<uint32_t>::iterator it = _param->_link_front_end_with_rename_unit[i].begin();381 uint32_t x = 0;382 for (uint32_t j=0; j<_param->_nb_front_end; j++)383 {380 { 381 std::vector<uint32_t>::iterator it = _param->_link_front_end_with_rename_unit[i].begin(); 382 uint32_t x = 0; 383 for (uint32_t j=0; j<_param->_nb_front_end; j++) 384 384 if (i == *it) 385 385 { … … 459 459 it++; 460 460 } 461 462 461 } 462 463 463 // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 464 464 for (uint32_t j=0; j<_param->_nb_inst_insert[i]; j++) … … 551 551 } 552 552 553 // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 553 554 for (uint32_t j=0; j<_param->_nb_inst_retire[i]; j++) 554 555 { … … 581 582 COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RE_PHY_NEW", 582 583 dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE_PHY_NEW"); 583 COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_EVENT_STATE" ,584 dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_EVENT_STATE" );585 586 584 if (_param->_have_port_context_id) 587 585 COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_CONTEXT_ID" , … … 616 614 COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RE_LOG" , 617 615 dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_NUM_REG_RE_LOG" ); 618 619 // dest = _name+"_glue";620 621 // #ifdef POSITION622 // _component->interface_map (src ,"retire_"+toString(j),623 // dest,"retire_"+toString(i)+"_"+toString(j));624 // #endif625 626 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_VAL" ,627 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_VAL" );628 // COMPONENT_MAP(_component,src ,"out_RETIRE_"+toString(j)+ "_ACK" ,629 // dest, "in_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_ACK" );630 // if (_param->_have_port_front_end_id)631 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_FRONT_END_ID" ,632 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_FRONT_END_ID" );633 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_WRITE_RD" ,634 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_WRITE_RD" );635 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RD_PHY_OLD",636 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_NUM_REG_RD_PHY_OLD");637 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RD_PHY_NEW",638 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_NUM_REG_RD_PHY_NEW");639 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_WRITE_RE" ,640 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_WRITE_RE" );641 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RE_PHY_OLD",642 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_NUM_REG_RE_PHY_OLD");643 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_NUM_REG_RE_PHY_NEW",644 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_NUM_REG_RE_PHY_NEW");645 // COMPONENT_MAP(_component,src , "in_RETIRE_"+toString(j)+ "_EVENT_STATE" ,646 // dest,"out_RETIRE_"+toString(i)+"_"+toString(j)+"_RENAME_UNIT_EVENT_STATE" );647 616 } 648 617 649 618 // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 650 for (uint32_t i=0; i<_param->_nb_front_end; i++) 651 for (uint32_t j=0; j<_param->_nb_context[i]; j++) 652 { 653 dest = _name+"_glue"; 654 655 #ifdef POSITION 656 _component->interface_map (src ,"spr_read_"+toString(i)+"_"+toString(j), 657 dest,"spr_" +toString(i)+"_"+toString(j)); 658 #endif 659 660 COMPONENT_MAP(_component,src , "in_SPR_READ_"+toString(i)+"_"+toString(j)+ "_SR", 661 dest,"out_SPR_" +toString(i)+"_"+toString(j)+"_RENAME_UNIT_SR"); 662 } 663 } 619 { 620 std::vector<uint32_t>::iterator it = _param->_link_front_end_with_rename_unit[i].begin(); 621 uint32_t x = 0; 622 for (uint32_t j=0; j<_param->_nb_front_end; j++) 623 if (i == (*it)) 624 { 625 for (uint32_t k=0; k<_param->_nb_context[i]; k++) 626 { 627 dest = _name+"_commit_unit"; 628 629 #ifdef POSITION 630 _component->interface_map (src ,"retire_event_"+toString(x)+"_"+toString(k), 631 dest,"retire_event_"+toString(j)+"_"+toString(k)); 632 #endif 633 COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_VAL", 634 dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_VAL"); 635 COMPONENT_MAP(_component,src ,"out_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_ACK", 636 dest, "in_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_ACK"); 637 COMPONENT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(x)+"_"+toString(k)+"_STATE", 638 dest,"out_RETIRE_EVENT_"+toString(j)+"_"+toString(k)+"_STATE"); 639 x++; 640 ++it; 641 } 642 } 643 } 644 645 // ~~~~~[ Interface : "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 646 { 647 std::vector<uint32_t>::iterator it = _param->_link_front_end_with_rename_unit[i].begin(); 648 uint32_t x = 0; 649 for (uint32_t j=0; j<_param->_nb_front_end; j++) 650 if (i == *it) 651 { 652 for (uint32_t k=0; k<_param->_nb_context[j]; k++) 653 { 654 dest = _name+"_glue"; 655 656 #ifdef POSITION 657 _component->interface_map (src ,"spr_read_"+toString(x)+"_"+toString(k), 658 dest,"spr_" +toString(j)+"_"+toString(k)); 659 #endif 660 661 COMPONENT_MAP(_component,src , "in_SPR_READ_"+toString(x)+"_"+toString(k)+ "_SR", 662 dest,"out_SPR_" +toString(j)+"_"+toString(k)+"_RENAME_UNIT_SR"); 663 } 664 x++; 665 ++it; 666 } 667 } 668 } 664 669 665 670 // =================================================================== … … 821 826 } 822 827 828 // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 829 // out_RETIRE_VAL - rename_unit.out_RETIRE_VAL 830 // in_RETIRE_ACK - rename_unit. in_RETIRE_ACK 831 // out_RETIRE_EVENT_STATE - rename_unit.out_RETIRE_EVENT_STATE 832 833 823 834 // ~~~~~[ Interface : "commit" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 824 835 for (uint32_t i=0; i<_param->_nb_inst_commit; i++) … … 1043 1054 dest, "in_SPR_COMMIT_"+toString(i)+"_"+toString(j)+"_SR_OV" ); 1044 1055 } 1045 1046 1056 } 1047 1057 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h
r101 r104 571 571 # define SPR_MACHI 2 // MAC High 572 572 573 574 575 573 // SR RENAME 576 574 # define NB_SPR_LOGIC 2 … … 596 594 # define EVENT_STATE_WAITEND 2 // Wait end of manage event (restaure a good context) 597 595 # define EVENT_STATE_END 3 // CPU can continue 598 599 # define SIZE_EVENT_TYPE 3 600 596 597 # define SIZE_EVENT_TYPE 3 598 601 599 # define EVENT_TYPE_NONE 0 // no event 602 600 # define EVENT_TYPE_MISS_SPECULATION 1 // miss of speculation (load or branch miss speculation) … … 1071 1069 }; 1072 1070 1071 // template<> inline std::string toString<morpheo::behavioural::event_state_t>(const morpheo::behavioural::event_state_t& x) 1072 // { 1073 // switch (x) 1074 // { 1075 // case morpheo::behavioural::EVENT_STATE_NO_EVENT : return "EVENT_STATE_NO_EVENT"; 1076 // case morpheo::behavioural::EVENT_STATE_EVENT : return "EVENT_STATE_EVENT" ; 1077 // case morpheo::behavioural::EVENT_STATE_WAITEND : return "EVENT_STATE_WAITEND" ; 1078 // case morpheo::behavioural::EVENT_STATE_END : return "EVENT_STATE_END" ; 1079 // default : return ""; 1080 // } 1081 // }; 1082 1083 // template<> inline std::string toString<morpheo::behavioural::event_type_t>(const morpheo::behavioural::event_type_t& x) 1084 // { 1085 // switch (x) 1086 // { 1087 // case morpheo::behavioural::EVENT_TYPE_NONE : return "EVENT_TYPE_NONE" ; 1088 // case morpheo::behavioural::EVENT_TYPE_MISS_SPECULATION : return "EVENT_TYPE_MISS_SPECULATION" ; 1089 // case morpheo::behavioural::EVENT_TYPE_EXCEPTION : return "EVENT_TYPE_EXCEPTION" ; 1090 // case morpheo::behavioural::EVENT_TYPE_BRANCH_NO_ACCURATE : return "EVENT_TYPE_BRANCH_NO_ACCURATE"; 1091 // case morpheo::behavioural::EVENT_TYPE_SPR_ACCESS : return "EVENT_TYPE_SPR_ACCESS" ; 1092 // case morpheo::behavioural::EVENT_TYPE_MSYNC : return "EVENT_TYPE_MSYNC" ; 1093 // case morpheo::behavioural::EVENT_TYPE_PSYNC : return "EVENT_TYPE_PSYNC" ; 1094 // case morpheo::behavioural::EVENT_TYPE_CSYNC : return "EVENT_TYPE_CSYNC" ; 1095 // default : return ""; 1096 // } 1097 // }; 1098 1073 1099 }; // end namespace morpheo 1074 1100 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h
r103 r104 10 10 #define MORPHEO_MAJOR_VERSION 0 11 11 #define MORPHEO_MINOR_VERSION 2 12 #define MORPHEO_REVISION "10 3"12 #define MORPHEO_REVISION "104" 13 13 #define MORPHEO_CODENAME "Castor" 14 14 15 #define MORPHEO_DATE_DAY " 16"15 #define MORPHEO_DATE_DAY "21" 16 16 #define MORPHEO_DATE_MONTH "01" 17 17 #define MORPHEO_DATE_YEAR "2009" -
trunk/IPs/systemC/processor/Morpheo/Files/Instance_debug.cfg
r102 r104 1 1 <?xml version="1.0" encoding="ISO-8859-1" ?> 2 2 3 <core name="Instance_ min">3 <core name="Instance_debug"> 4 4 5 5 <thread id="0"> 6 <parameter name="size_ifetch_queue" value=" 1" />7 <parameter name="nb_inst_fetch" value=" 2" />6 <parameter name="size_ifetch_queue" value="4" /> 7 <parameter name="nb_inst_fetch" value="1" /> 8 8 <parameter name="ras_size_queue" value="2" /> 9 <parameter name="upt_size_queue" value=" 1" />9 <parameter name="upt_size_queue" value="2" /> 10 10 <parameter name="ufpt_size_queue" value="1" /> 11 11 … … 16 16 17 17 <decod_bloc id="0"> 18 <parameter name="size_decod_queue" value=" 1" />18 <parameter name="size_decod_queue" value="4" /> 19 19 <parameter name="nb_inst_decod" value="1" /> 20 20 <parameter name="nb_context_select" value="1" /> … … 33 33 <parameter name="nb_reg_free" value="1" /> 34 34 <parameter name="nb_rename_unit_bank" value="1" /> 35 <parameter name="size_read_counter" value=" 1" />35 <parameter name="size_read_counter" value="4" /> 36 36 </rename_bloc> 37 37 38 38 <read_bloc id="0"> 39 <parameter name="size_read_queue" value=" 1" />40 <parameter name="size_reservation_station" value=" 1" />39 <parameter name="size_read_queue" value="4" /> 40 <parameter name="size_reservation_station" value="4" /> 41 41 <parameter name="nb_inst_retire_reservation_station" value="1" /> 42 42 </read_bloc> 43 43 44 44 <write_bloc id="0"> 45 <parameter name="size_write_queue" value=" 1" />46 <parameter name="size_execute_queue" value=" 1" />45 <parameter name="size_write_queue" value="4" /> 46 <parameter name="size_execute_queue" value="4" /> 47 47 <parameter name="nb_bypass_write" value="0" /> 48 48 </write_bloc> … … 74 74 <parameter name="btb_size_counter" value="2" /> 75 75 <parameter name="btb_victim_scheme" value="1" /> 76 <parameter name="dir_predictor_scheme" value=" 1" />76 <parameter name="dir_predictor_scheme" value="3" /> 77 77 78 78 <predictor id="0"> … … 115 115 <parameter name="nb_rename_unit_select" value="1" /> 116 116 <parameter name="nb_execute_loop_select" value="1" /> 117 <parameter name="size_re_order_buffer" value="1 " />117 <parameter name="size_re_order_buffer" value="16" /> 118 118 <parameter name="nb_re_order_buffer_bank" value="1" /> 119 119 <parameter name="commit_priority" value="1" /> 120 120 <parameter name="commit_load_balancing" value="1" /> 121 <parameter name="size_issue_queue" value=" 1" />121 <parameter name="size_issue_queue" value="4" /> 122 122 <parameter name="nb_issue_queue_bank" value="1" /> 123 123 <parameter name="issue_priority" value="1" /> 124 124 <parameter name="issue_load_balancing" value="1" /> 125 <parameter name="size_reexecute_queue" value=" 1" />125 <parameter name="size_reexecute_queue" value="4" /> 126 126 <parameter name="reexecute_priority" value="1" /> 127 127 <parameter name="reexecute_load_balancing" value="1" /> … … 132 132 <parameter name="nb_write_unit" value="1" /> 133 133 <parameter name="nb_gpr_bank" value="1" /> 134 <parameter name="nb_gpr_port_read_by_bank" value=" 1" />134 <parameter name="nb_gpr_port_read_by_bank" value="2" /> 135 135 <parameter name="nb_gpr_port_write_by_bank" value="1" /> 136 136 <parameter name="nb_spr_bank" value="1" /> -
trunk/IPs/systemC/processor/Morpheo/Files/Morpheo.sim
r101 r104 8 8 <parameter name="use_vhdl_testbench_assert" value="0" /> 9 9 <parameter name="use_position" value="0" /> 10 <parameter name="use_statistics" value=" 1" />10 <parameter name="use_statistics" value="0" /> 11 11 <parameter name="use_information" value="0" /> 12 <parameter name="use_header" value=" 1" />12 <parameter name="use_header" value="0" /> 13 13 14 14 <parameter name="statistics_cycle_start" value="0" /> … … 25 25 <parameter name="debug_level" value="3" /> 26 26 <parameter name="debug_cycle_start" value="0" /> 27 <parameter name="debug_cycle_stop" value=" 300" />27 <parameter name="debug_cycle_stop" value="200" /> 28 28 <parameter name="debug_have_log_file" value="0" /> 29 29
Note: See TracChangeset
for help on using the changeset viewer.