Changeset 767 for branches/RWT/modules/vci_cc_vcache_wrapper/caba/source
- Timestamp:
- Aug 25, 2014, 5:58:16 PM (10 years ago)
- Location:
- branches/RWT/modules/vci_cc_vcache_wrapper/caba/source
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/RWT/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h
r646 r767 280 280 }; 281 281 282 // enum transaction_type_d_e 283 // { 284 // // b0 : 1 if cached 285 // // b1 : 1 if instruction 286 // TYPE_DATA_UNC = 0x0, 287 // TYPE_DATA_MISS = 0x1, 288 // TYPE_INS_UNC = 0x2, 289 // TYPE_INS_MISS = 0x3, 290 // }; 291 292 //////////////////MODIFIED//////////////// 282 283 // cache line status 293 284 enum content_line_cache_status_e 294 285 { … … 522 513 sc_signal<size_t> r_dcache_cc_send_updt_tab_idx; // DCACHE cc_send update table index 523 514 524 // special registers for ODCCP/RWT525 sc_signal<bool> r_dcache_cc_cleanup_updt_data; 526 sc_signal<bool> r_dcache_cc_cleanup_line_ncc; 527 sc_signal<bool> r_dcache_miss_victim_no_coherence; 528 sc_signal<bool> r_dcache_line_no_coherence; 515 // special registers for RWT 516 sc_signal<bool> r_dcache_cc_cleanup_updt_data; // Register for cleanup with data (wb updt) 517 sc_signal<bool> r_dcache_cc_cleanup_line_ncc; // Register for cleanup with data (wb updt) 518 sc_signal<bool> r_dcache_miss_victim_no_coherence; // Register for victim in no coherence mode 519 sc_signal<bool> r_dcache_line_no_coherence; // Register for line current in no coherence mode 529 520 sc_signal<bool> r_dcache_dirty_save; 530 521 sc_signal<uint32_t> r_cc_send_cpt_word; … … 536 527 sc_signal<paddr_t> r_dcache_xtn_data_addr; 537 528 sc_signal<uint32_t> r_dcache_xtn_data_cpt; 529 sc_signal<bool> r_dcache_read_state; 530 538 531 // dcache directory extension 539 ///////////////////////////MODIFIED///////////////////////////////////////////////////540 //bool *r_dcache_in_tlb; // copy exist in dtlb or itlb541 //bool *r_dcache_contains_ptd; // cache line contains a PTD542 532 int *r_dcache_content_state; // content state of one cache line 543 int *r_dcache_dirty_word; 544 bool *r_dcache_zombi_ncc; 533 // Stats 534 int *r_dcache_dirty_word; // use for compute number of words dirty per cleanup_data 535 bool *r_dcache_zombi_ncc; // use for compute number of blocked write on ncc zombi line 545 536 ////////////////////////////////////////////////////////////////////////////////////// 546 537 547 //RWT 548 sc_signal<bool> r_dcache_read_state; 549 550 /////////////////////////////////// 538 /////////////////////////////////// 551 539 // Physical address extension for data access 552 540 sc_signal<uint32_t> r_dcache_paddr_ext; // CP2 register (if vci_address > 32) … … 574 562 //RWT 575 563 GenericFifo<bool> r_vci_rsp_fifo_rpktid; 576 577 564 GenericFifo<uint32_t> r_cc_send_data_fifo; 578 565 -
branches/RWT/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
r646 r767 346 346 r_dcache_tlb_pte_flags("r_dcache_tlb_pte_flags"), 347 347 r_dcache_tlb_pte_ppn("r_dcache_tlb_pte_ppn"), 348 // r_dcache_tlb_cache_way("r_dcache_tlb_cache_way"),349 // r_dcache_tlb_cache_set("r_dcache_tlb_cache_set"),350 // r_dcache_tlb_cache_word("r_dcache_tlb_cache_word"),351 348 r_dcache_tlb_way("r_dcache_tlb_way"), 352 349 r_dcache_tlb_set("r_dcache_tlb_set"), … … 425 422 426 423 assert( (itlb_sets == dtlb_sets) and 427 "itlb_sets and dtlb_sets parameters must be e tqual");424 "itlb_sets and dtlb_sets parameters must be equal"); 428 425 429 426 assert( (itlb_ways == dtlb_ways) and 430 "itlb_ways and dtlb_ways parameters must be e tqual");427 "itlb_ways and dtlb_ways parameters must be equal"); 431 428 432 429 r_mmu_params = (uint32_log2(m_dtlb_ways) << 29) | (uint32_log2(m_dtlb_sets) << 25) | … … 470 467 ///////////////////////////////////// 471 468 { 472 ////////////MODIFIED/////////////473 //delete [] r_dcache_in_tlb;474 //delete [] r_dcache_contains_ptd;475 469 delete [] r_dcache_content_state; 476 470 delete [] r_dcache_dirty_word; 477 471 delete [] r_dcache_zombi_ncc; 478 472 ///////////////////////////////// 479 print_stats();473 //print_stats(); 480 474 } 481 475 … … 783 777 for (size_t i=0 ; i< m_dcache_ways*m_dcache_sets ; i++) 784 778 { 785 // MODIFIED786 //r_dcache_in_tlb[i] = false;787 //r_dcache_contains_ptd[i] = false;788 779 r_dcache_content_state[i] = LINE_CACHE_DATA_NOT_DIRTY; 789 780 r_dcache_dirty_word[i] = 0; … … 2246 2237 m_drsp.error = false; 2247 2238 m_drsp.rdata = 0; 2248 //if(m_cpt_total_cycles % 1000000 == 0 ) r_dcache.printTrace();2249 2239 2250 2240 switch ( r_dcache_fsm.read() ) … … 2381 2371 size_t way = r_dcache_save_cache_way.read(); 2382 2372 size_t set = r_dcache_save_cache_set.read(); 2383 // MODIFIED 2384 //if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) 2385 //{ 2373 2386 2374 if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_IN_TLB ) 2387 2375 { … … 2390 2378 r_dcache_tlb_inval_line = r_dcache_save_paddr.read()>> 2391 2379 (uint32_log2(m_dcache_words<<2)); 2392 // MODIFIED RWT: DIRTY 2393 //r_dcache_in_tlb[way*m_dcache_sets+set] = false; 2380 2394 2381 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 2395 2382 } 2396 // MODIFIED2397 //else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )2398 //{2399 2383 else if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_CONTAINS_PTD ) 2400 2384 { 2401 2385 r_itlb.reset(); 2402 2386 r_dtlb.reset(); 2403 // MODIFIED 2404 //r_dcache_contains_ptd[way*m_dcache_sets+set] = false; 2387 2405 2388 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 2406 2389 } … … 2802 2785 m_cpt_data_miss++; 2803 2786 #endif 2804 /*ODCCP*/2805 //std::cout << "\t\t\t\t\tCACHE MISS NEED READ for : " << name() << std::endl;2806 2787 // request a VCI DMISS transaction 2807 2788 r_dcache_vci_paddr = paddr; … … 2832 2813 m_cpt_data_read++; 2833 2814 #endif 2834 /*if ((tlb_flags.s == 0) and (r_mmu_mode.read() & DATA_TLB_MASK) and (cache_state == CACHE_SLOT_STATE_VALID_CC))2835 {2836 //ODCCP2837 std::cout << "READ NO COHERENCE on " << name() << " | paddr = " << std::hex << paddr << std::dec << " | way = " << cache_way << " | set = " << cache_set << " | at cycle : "<< m_cpt_total_cycles << std::endl;2838 r_dcache.write_dir(cache_way,2839 cache_set,2840 CACHE_SLOT_STATE_VALID_NCC);2841 }*/2842 2815 // returns data to processor 2843 2816 m_drsp.valid = true; … … 2883 2856 r_dcache_ll_rsp_count = 0; 2884 2857 r_dcache_fsm = DCACHE_LL_WAIT; 2885 /*ODCCP*/2886 //std::cout << "LL on " << name() << " | paddr = " << std::hex << paddr << std::dec << " | at cycle : " << m_cpt_total_cycles << std::endl;2887 2858 2888 2859 }// end LL … … 2973 2944 m_cpt_data_write_on_zombi++; 2974 2945 } 2975 else 2946 else // Miss in DCACHE 2976 2947 { 2977 m_cpt_data_write_miss++; 2978 2979 m_drsp.valid = true; 2980 wbuf_request = true; 2981 updt_request = false; 2948 m_drsp.valid = true; 2949 wbuf_request = true; 2950 updt_request = false; 2951 m_cpt_data_write_miss++; 2982 2952 } 2983 2953 } … … 3155 3125 &word, 3156 3126 &cache_state ); 3127 3157 3128 #ifdef INSTRUMENTATION 3158 3129 m_cpt_dcache_data_read++; 3159 3130 m_cpt_dcache_dir_read++; 3160 3131 #endif 3161 /*ODCCP*/ 3162 // assert((cache_state != CACHE_SLOT_STATE_VALID_NCC) and "DCACHE_TLB_PTE1_GET : IMPOSSIBLE NCC HERE"); 3163 // if ( cache_state == CACHE_SLOT_STATE_VALID_CC ) // hit in dcache 3132 3164 3133 if (( cache_state == CACHE_SLOT_STATE_VALID_NCC ) or ( cache_state == CACHE_SLOT_STATE_VALID_CC )) 3165 3134 { … … 3199 3168 { 3200 3169 // mark the cache line ac containing a PTD 3201 //MODIFIED3202 //r_dcache_contains_ptd[m_dcache_sets*way+set] = true;3203 3170 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_CONTAINS_PTD; 3204 3171 … … 3236 3203 else // PTE1 : we must update the TLB 3237 3204 { 3238 // MODIFIED3239 //r_dcache_in_tlb[m_icache_sets*way+set] = true;3240 3205 r_dcache_content_state[m_icache_sets*way+set] = LINE_CACHE_IN_TLB; 3241 3206 r_dcache_tlb_pte_flags = entry; 3242 //r_dcache_tlb_cache_way = way;3243 //r_dcache_tlb_cache_set = set;3244 //r_dcache_tlb_cache_word = word;3245 3207 r_dcache_fsm = DCACHE_TLB_PTE1_SELECT; 3246 3208 … … 3479 3441 m_cpt_dcache_dir_read++; 3480 3442 #endif 3481 /*ODCCP*/3482 // assert((cache_state != CACHE_SLOT_STATE_VALID_NCC) and "DCACHE_TLB_PTE2_GET : IMPOSSIBLE NCC HERE");3483 // if (cache_state == CACHE_SLOT_STATE_VALID_CC) // hit in dcache3484 3443 if ((cache_state == CACHE_SLOT_STATE_VALID_CC) or (cache_state == CACHE_SLOT_STATE_VALID_NCC)) 3485 3444 { … … 3514 3473 else // mapped : we must update the TLB 3515 3474 { 3516 // MODIFIED3517 //r_dcache_in_tlb[m_dcache_sets*way+set] = true;3518 3475 r_dcache_content_state[m_dcache_sets*way+set] = LINE_CACHE_IN_TLB; 3519 3476 r_dcache_tlb_pte_flags = pte_flags; 3520 3477 r_dcache_tlb_pte_ppn = pte_ppn; 3521 //r_dcache_tlb_cache_way = way;3522 //r_dcache_tlb_cache_set = set;3523 //r_dcache_tlb_cache_word = word;3524 3478 r_dcache_fsm = DCACHE_TLB_PTE2_SELECT; 3525 3479 … … 4002 3956 &tag, 4003 3957 &state ); 4004 /*ODCCP*/4005 3958 4006 3959 if ( state == CACHE_SLOT_STATE_VALID_CC ) // inval required … … 4031 3984 r_dcache_miss_set = set; 4032 3985 r_dcache_cc_cleanup_line_ncc = true; 3986 4033 3987 if (r_dcache_content_state[m_dcache_sets*way+set] != LINE_CACHE_DATA_NOT_DIRTY)//Must send data in the cleanup 4034 //if (true)//Must send data in the cleanup4035 3988 { 4036 3989 r_dcache_xtn_flush_addr_data = (tag * m_dcache_sets + set) * m_dcache_words * 4; … … 4092 4045 } 4093 4046 } 4094 // else if ( r_dcache_clack_req.read() )4095 // {4096 // r_dcache_fsm = DCACHE_CC_CHECK;4097 // r_dcache_fsm_cc_save = r_dcache_fsm.read();4098 // break;4099 // }4100 4047 break; 4101 4048 } … … 4109 4056 size_t set = r_dcache_miss_set.read(); 4110 4057 4111 // MODIFIED4112 //r_dcache_in_tlb[m_dcache_sets*way+set] = false;4113 //r_dcache_contains_ptd[m_dcache_sets*way+set] = false;4114 4058 r_dcache_content_state[m_dcache_sets*way+set] = LINE_CACHE_DATA_DIRTY; 4115 4059 … … 4215 4159 &set, 4216 4160 &word ); 4217 /*ODCCP*/ 4218 //assert((state != CACHE_SLOT_STATE_VALID_NCC) and "NOT YET DONE"); 4161 4219 4162 if ((state == CACHE_SLOT_STATE_VALID_CC) or (state == CACHE_SLOT_STATE_VALID_NCC)) // inval to be done 4220 4163 { … … 4266 4209 m_cpt_dcache_dir_write++; 4267 4210 #endif 4268 // MODIFIER POUR DIRTY BIT // 4211 4269 4212 if ((state == CACHE_SLOT_STATE_VALID_CC) or (state == CACHE_SLOT_STATE_VALID_NCC))// request cleanup 4270 4213 { … … 4284 4227 r_dcache_cc_cleanup_line_ncc = true; 4285 4228 if ((r_dcache_content_state[way*m_dcache_sets+set] != LINE_CACHE_DATA_NOT_DIRTY)) //must send data 4286 //if (true) //must send data4287 4229 { 4288 4230 r_dcache_cc_cleanup_updt_data = true; … … 4305 4247 } 4306 4248 } 4307 /*ODCCP*/4308 4249 4309 4250 // possible itlb & dtlb invalidate 4310 // MODIFIED4311 //if ( r_dcache_in_tlb[way*m_dcache_sets+set] )4312 //{4313 4251 if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_IN_TLB ) 4314 4252 { … … 4317 4255 r_dcache_fsm_scan_save = DCACHE_XTN_DC_INVAL_END; 4318 4256 r_dcache_fsm = DCACHE_INVAL_TLB_SCAN; 4319 // MODIFIED4320 //r_dcache_in_tlb[way*m_dcache_sets+set] = false;4321 4257 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 4322 4258 } 4323 // MODIFIED4324 //else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )4325 //{4326 4259 else if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_CONTAINS_PTD) 4327 4260 { 4328 4261 r_itlb.reset(); 4329 4262 r_dtlb.reset(); 4330 // MODIFIED4331 //r_dcache_contains_ptd[way*m_dcache_sets+set] = false;4332 4263 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 4333 4264 r_dcache_fsm = DCACHE_IDLE; … … 4354 4285 /*ODCCP*/ 4355 4286 ////////////////////////////// 4356 case DCACHE_XTN_DC_INVAL_DATA: //A verifier4287 case DCACHE_XTN_DC_INVAL_DATA: 4357 4288 { 4358 4289 … … 4420 4351 } 4421 4352 4422 bool 4423 bool 4424 size_t 4425 size_t 4426 paddr_t 4427 int state;4428 bool 4429 bool 4353 bool found = false; 4354 bool cleanup = false; 4355 size_t way = 0; 4356 size_t set = 0; 4357 paddr_t victim = 0; 4358 int state; 4359 bool s_cleanup_updt_data = false; 4360 bool s_cleanup_line_ncc = false; 4430 4361 4431 4362 #ifdef INSTRUMENTATION … … 4449 4380 r_dcache_miss_clack = true; 4450 4381 r_dcache_fsm = DCACHE_MISS_CLEAN; 4451 if( (state == CACHE_SLOT_STATE_VALID_NCC) ) //and (r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_DATA_DIRTY) )4382 if( (state == CACHE_SLOT_STATE_VALID_NCC) ) 4452 4383 { 4453 //MODIFIER POUR DIRTY BIT //4454 4384 s_cleanup_line_ncc = true; 4455 4385 r_dcache_miss_data_addr = (victim*m_dcache_words)*4; 4456 4386 if ((r_dcache_content_state[way*m_dcache_sets+set] != LINE_CACHE_DATA_NOT_DIRTY))//must send data 4457 //if (true)//must send data4458 4387 { 4459 4388 s_cleanup_updt_data = true; … … 4472 4401 m_cpt_cleanup_data_not_dirty ++; 4473 4402 } 4474 4475 4403 else 4476 4404 { … … 4555 4483 } 4556 4484 } 4557 // else if ( r_dcache_clack_req.read() )4558 // {4559 // r_dcache_fsm = DCACHE_CC_CHECK;4560 // r_dcache_fsm_cc_save = r_dcache_fsm.read();4561 // break;4562 // }4563 4485 4564 4486 break; … … 4590 4512 // if selective itlb & dtlb invalidate are required 4591 4513 // the miss response is not handled before invalidate completed 4592 // MODIFIED4593 //if ( r_dcache_in_tlb[way*m_dcache_sets+set] )4594 //{4595 4514 if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_IN_TLB ) 4596 4515 { 4597 //MODIFIED4598 //r_dcache_in_tlb[way*m_dcache_sets+set] = false;4599 4516 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 4600 4517 if( not r_dcache_cleanup_victim_req.read() ) … … 4610 4527 r_dcache_fsm = DCACHE_INVAL_TLB_SCAN; 4611 4528 } 4612 // MODIFIED4613 //else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )4614 //{4615 4529 else if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_CONTAINS_PTD ) 4616 4530 { 4617 4531 r_itlb.reset(); 4618 4532 r_dtlb.reset(); 4619 // MODIFIED4620 //r_dcache_contains_ptd[way*m_dcache_sets+set] = false;4621 4533 r_dcache_content_state[way*m_dcache_sets+set] = LINE_CACHE_DATA_DIRTY; 4622 4534 r_dcache_fsm = DCACHE_MISS_WAIT; … … 4846 4758 if (r_dcache_read_state.read()) 4847 4759 { 4848 r_dcache.write_dir( r_dcache_save_paddr.read(),4760 r_dcache.write_dir( r_dcache_save_paddr.read(), 4849 4761 r_dcache_miss_way.read(), 4850 4762 r_dcache_miss_set.read(), … … 4856 4768 else 4857 4769 { 4858 r_dcache.write_dir( r_dcache_save_paddr.read(),4770 r_dcache.write_dir( r_dcache_save_paddr.read(), 4859 4771 r_dcache_miss_way.read(), 4860 4772 r_dcache_miss_set.read(), … … 4878 4790 << " / SET = " << r_dcache_miss_set.read() << std::endl; 4879 4791 #endif 4880 // reset directory extension4881 4882 // MODIFIED4883 //r_dcache_in_tlb[way*m_dcache_sets+set] = false;4884 //r_dcache_contains_ptd[way*m_dcache_sets+set] = false;4885 4792 } 4886 4793 if (r_dcache_miss_type.read()==PTE1_MISS) r_dcache_fsm = DCACHE_TLB_PTE1_GET; … … 5157 5064 word, 5158 5065 r_dcache_vci_cas_new.read()); 5159 //std::cout << "CAS local" << std::endl; 5066 5160 5067 if ( r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_IN_TLB ) 5161 5068 { … … 5317 5224 r_dcache_cc_way = way; 5318 5225 r_dcache_cc_set = set; 5319 /*RWT / ODCCP*/ 5320 if ((state == CACHE_SLOT_STATE_VALID_CC) or (state == CACHE_SLOT_STATE_VALID_NCC)) 5321 { 5322 // need to update the cache state5226 5227 if ((state == CACHE_SLOT_STATE_VALID_CC) or (state == CACHE_SLOT_STATE_VALID_NCC)) // hit 5228 { 5229 // need to update the cache state 5323 5230 r_dcache_cc_need_write = true; 5324 5231 r_dcache_cc_cleanup_line_ncc = false; … … 5424 5331 } 5425 5332 } 5426 5333 assert (not r_dcache_cc_send_req.read() && 5427 5334 "ERROR in DCACHE_CC_INVAL: the r_dcache_cc_send_req " 5428 5335 "must not be set"); 5429 // coherence request completed 5430 r_cc_receive_dcache_req = false; 5431 // request multicast acknowledgement 5432 r_dcache_cc_send_req = true; 5433 r_dcache_cc_send_way = way; 5434 r_dcache_cc_send_nline = r_cc_receive_dcache_nline.read(); 5435 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 5436 // MODIFIER POUR DIRTY BIT // 5437 if (cache_state == CACHE_SLOT_STATE_VALID_NCC and not r_cc_receive_dcache_inval_is_config.read()) 5336 // coherence request completed 5337 r_cc_receive_dcache_req = false; 5338 // request multicast acknowledgement 5339 r_dcache_cc_send_req = true; 5340 r_dcache_cc_send_way = way; 5341 r_dcache_cc_send_nline = r_cc_receive_dcache_nline.read(); 5342 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 5343 5344 if (cache_state == CACHE_SLOT_STATE_VALID_NCC and not r_cc_receive_dcache_inval_is_config.read()) 5345 { 5346 r_dcache_cc_cleanup_line_ncc = true; 5347 if ((r_dcache_content_state[way*m_dcache_sets+set] != LINE_CACHE_DATA_NOT_DIRTY) or r_dcache_dirty_save.read() or dirty_save) //must send data 5348 { 5349 r_dcache_cc_cleanup_updt_data = true; 5350 for (size_t w = 0; w< m_dcache_words; w++) 5438 5351 { 5439 r_dcache_cc_cleanup_line_ncc = true; 5440 if ((r_dcache_content_state[way*m_dcache_sets+set] != LINE_CACHE_DATA_NOT_DIRTY) or r_dcache_dirty_save.read() or dirty_save) //must send data 5441 { 5442 r_dcache_cc_cleanup_updt_data = true; 5443 for (size_t w = 0; w< m_dcache_words; w++) 5444 { 5445 m_cpt_cleanup_data_dirty_word += r_dcache_dirty_word[(m_dcache_sets*way+set)*m_dcache_words + w]; 5446 } 5447 5448 r_dcache_fsm = DCACHE_CC_INVAL_DATA; 5449 } 5450 else 5451 { 5452 r_dcache.write_dir( way, 5453 set, 5454 CACHE_SLOT_STATE_ZOMBI ); 5352 m_cpt_cleanup_data_dirty_word += r_dcache_dirty_word[(m_dcache_sets*way+set)*m_dcache_words + w]; 5353 } 5354 5355 r_dcache_fsm = DCACHE_CC_INVAL_DATA; 5356 } 5357 else 5358 { 5359 r_dcache.write_dir( way, 5360 set, 5361 CACHE_SLOT_STATE_ZOMBI ); 5455 5362 5456 5457 5458 5459 5460 5461 5462 5463 5464 5363 r_dcache_cc_cleanup_updt_data = false; 5364 r_dcache_fsm = r_dcache_fsm_cc_save.read(); 5365 } 5366 } 5367 else 5368 { 5369 r_dcache_cc_cleanup_updt_data = false; 5370 r_dcache_fsm = r_dcache_fsm_cc_save.read(); 5371 } 5465 5372 5466 5373 break; … … 6220 6127 if (p_dspin_p2m.read.read()) 6221 6128 { 6222 //std::cout << "CLEANUP send on line " << r_dcache_cc_send_nline.read() << std::endl; 6129 6223 6130 if(r_dcache_cc_cleanup_updt_data.read() and (r_cc_send_last_client.read() == 0))//dcache request with data 6224 {6131 { 6225 6132 r_cc_send_fsm = CC_SEND_CLEANUP_DATA_UPDT; 6226 6133 } … … 6248 6155 if(r_cc_send_data_fifo.rok()) 6249 6156 { 6250 /*ODCCP*///std::cout<<"CLEANUP_DATA_UPDT" << std::endl;6251 6157 m_cpt_data_cleanup++; 6252 6158 cleanup_data_updt_fifo_dcache_get = true; … … 6254 6160 if (r_cc_send_cpt_word.read() == m_dcache_words-1) 6255 6161 { 6256 //std::cout << "L1 paddr CLEANUP DATA | paddr = " << std::hex << (r_dcache_cc_send_nline.read()*m_dcache_words)*4 << std::dec << std::endl;6257 /*ODCCP*/6258 //std::cout << "CLEANUP with DATA finished by " << name() << std::endl;6259 6162 r_dcache_cc_send_req = false; 6260 6163 r_dcache_cc_cleanup_updt_data = false; … … 6583 6486 vci_rsp_fifo_dcache_put, 6584 6487 vci_rsp_fifo_dcache_data); 6585 //BUG pktid 6488 6586 6489 r_vci_rsp_fifo_rpktid.update(vci_rsp_fifo_rpktid_get, 6587 6490 vci_rsp_fifo_rpktid_put, … … 6798 6701 { 6799 6702 // initialize dspin send data 6800 // DspinDhccpParam::dspin_set(dspin_send_data,6801 // 0,6802 // DspinDhccpParam::P2M_EOP);6803 6703 DspinDhccpParam::dspin_set(dspin_send_data, 6804 6704 m_cc_global_id, … … 6892 6792 case CC_SEND_CLEANUP_DATA_UPDT: 6893 6793 { 6894 /*if (r_cc_send_cpt_word.read() == m_dcache_words-1)6895 {6896 DspinDhccpParam::dspin_set(dspin_send_data,6897 1,6898 DspinDhccpParam::FROM_L1_EOP);6899 }6900 else6901 {6902 DspinDhccpParam::dspin_set(dspin_send_data,6903 0,6904 DspinDhccpParam::FROM_L1_EOP);6905 }*/6906 6794 6907 6795 DspinDhccpParam::dspin_set(dspin_send_data, … … 6910 6798 6911 6799 p_dspin_p2m.data = dspin_send_data; 6912 //std::cout << "genmoore CLEANUP DATA UPDT : dspin_send_data = " << std::hex << dspin_send_data << std::dec << std::endl;6913 6800 p_dspin_p2m.write = true; 6914 6801 p_dspin_p2m.eop = (r_cc_send_cpt_word.read() == m_dcache_words-1); … … 6919 6806 { 6920 6807 // initialize dspin send data 6921 // DspinDhccpParam::dspin_set(dspin_send_data,6922 // 1,6923 // DspinDhccpParam::P2M_EOP);6924 6808 DspinDhccpParam::dspin_set(dspin_send_data, 6925 6809 0,
Note: See TracChangeset
for help on using the changeset viewer.