Changeset 495 for branches/RWT/modules/vci_cc_vcache_wrapper/caba/source
- Timestamp:
- Aug 22, 2013, 6:45:38 PM (11 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
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/trunk/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h merged eligible /branches/v5/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h 444-467
r477 r495 179 179 CC_RECEIVE_INS_UPDT_HEADER, 180 180 CC_RECEIVE_INS_UPDT_NLINE, 181 CC_RECEIVE_INS_UPDT_DATA,182 181 CC_RECEIVE_DATA_INVAL_HEADER, 183 182 CC_RECEIVE_DATA_INVAL_NLINE, 184 183 CC_RECEIVE_DATA_UPDT_HEADER, 185 184 CC_RECEIVE_DATA_UPDT_NLINE, 185 CC_RECEIVE_INS_UPDT_DATA, 186 186 CC_RECEIVE_DATA_UPDT_DATA, 187 187 }; … … 403 403 sc_signal<bool> r_icache_tlb_rsp_error; // tlb miss response error 404 404 405 // Filp-Flop in ICACHE FSM for saving the cleanup victim request 406 sc_signal<bool> r_icache_cleanup_victim_req; 407 sc_signal<paddr_t> r_icache_cleanup_victim_nline; 408 405 409 // communication between ICACHE FSM and CC_SEND FSM 406 410 sc_signal<bool> r_icache_cc_send_req; // ICACHE cc_send request … … 504 508 sc_signal<bool> r_dcache_xtn_req; // xtn request (caused by processor) 505 509 sc_signal<int> r_dcache_xtn_opcode; // xtn request type 510 511 // Filp-Flop in DCACHE FSM for saving the cleanup victim request 512 sc_signal<bool> r_dcache_cleanup_victim_req; 513 sc_signal<bool> r_dcache_cleanup_victim_line_ncc; 514 sc_signal<bool> r_dcache_cleanup_victim_updt_data; 515 sc_signal<paddr_t> r_dcache_cleanup_victim_nline; 506 516 507 517 // communication between DCACHE FSM and CC_SEND FSM -
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
branches/RWT/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp merged eligible /branches/v5/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp 444-467
r477 r495 354 354 r_dcache_xtn_req("r_dcache_xtn_req"), 355 355 r_dcache_xtn_opcode("r_dcache_xtn_opcode"), 356 356 357 r_dcache_cleanup_victim_req("r_dcache_cleanup_victim_req"), 358 r_dcache_cleanup_victim_nline("r_dcache_cleanup_victim_nline"), 359 357 360 r_dcache_cc_send_req("r_dcache_cc_send_req"), 358 361 r_dcache_cc_send_type("r_dcache_cc_send_type"), … … 374 377 r_vci_rsp_fifo_dcache("r_vci_rsp_fifo_dcache", 2), // 2 words depth 375 378 r_vci_rsp_fifo_rpktid("r_vci_rsp_fifo_rpktid", 2), // 2 words depth 376 r_cc_send_data_fifo("r_cc_send_data_fifo", 2),379 r_cc_send_data_fifo("r_cc_send_data_fifo", 16), 377 380 378 381 r_cc_send_fsm("r_cc_send_fsm"), … … 815 818 // No request from DCACHE FSM to CC_SEND FSM 816 819 r_dcache_cc_send_req = false; 817 818 820 r_dcache_clack_req = false; 819 821 … … 852 854 r_dcache_miss_data_cpt = 0; 853 855 r_dcache_miss_data_addr = 0; 856 857 r_dcache_cleanup_victim_req = false; 858 r_dcache_cleanup_victim_line_ncc = false; 859 r_dcache_cleanup_victim_updt_data = false; 854 860 855 861 // activity counters … … 1093 1099 1094 1100 // coherence interrupt 1095 if ( r_cc_receive_icache_req.read() )1101 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1096 1102 { 1097 1103 r_icache_fsm = ICACHE_CC_CHECK; … … 1329 1335 1330 1336 // coherence interrupt 1331 if ( r_cc_receive_icache_req.read() )1337 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1332 1338 { 1333 1339 r_icache_fsm = ICACHE_CC_CHECK; … … 1381 1387 1382 1388 // coherence request (from CC_RECEIVE FSM) 1383 if ( r_cc_receive_icache_req.read() )1389 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1384 1390 { 1385 1391 r_icache_fsm = ICACHE_CC_CHECK; … … 1588 1594 1589 1595 // coherence interrupt 1590 if ( r_cc_receive_icache_req.read() )1596 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1591 1597 { 1592 1598 r_icache_fsm = ICACHE_CC_CHECK; … … 1685 1691 1686 1692 // coherence interrupt 1687 if ( r_cc_receive_icache_req.read() )1693 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1688 1694 { 1689 1695 r_icache_fsm = ICACHE_CC_CHECK; … … 1764 1770 1765 1771 // coherence interrupt 1766 if ( r_cc_receive_icache_req.read() )1772 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1767 1773 { 1768 1774 r_icache_fsm = ICACHE_CC_CHECK; … … 1843 1849 1844 1850 // coherence interrupt 1845 if ( r_cc_receive_icache_req.read() )1851 if ( r_cc_receive_icache_req.read() and not r_icache_cc_send_req.read()) 1846 1852 { 1847 1853 r_icache_fsm = ICACHE_CC_CHECK; … … 1882 1888 paddr_t mask = ~((m_icache_words<<2)-1); 1883 1889 1890 // CLACK handler 1891 // We switch the directory slot to EMPTY state 1892 // and reset r_icache_miss_clack if the cleanup ack 1893 // is matching a pending miss. 1894 if ( r_icache_clack_req.read() ) 1895 { 1896 1897 if ( m_ireq.valid ) m_cost_ins_miss_frz++; 1898 1899 #ifdef INSTRUMENTATION 1900 m_cpt_icache_dir_write++; 1901 #endif 1902 r_icache.write_dir( 0, 1903 r_icache_clack_way.read(), 1904 r_icache_clack_set.read(), 1905 CACHE_SLOT_STATE_EMPTY); 1906 1907 if ( (r_icache_miss_set.read() == r_icache_clack_set.read()) and 1908 (r_icache_miss_way.read() == r_icache_clack_way.read()) ) 1909 { 1910 r_icache_miss_clack = false; 1911 } 1912 1913 r_icache_clack_req = false; 1914 1915 // return to cc_save state 1916 r_icache_fsm = r_icache_fsm_save.read(); 1917 1918 #if DEBUG_ICACHE 1919 if ( m_debug_activated ) 1920 { 1921 std::cout << " <PROC " << name() 1922 << " ICACHE_CC_CHECK> CC_TYPE_CLACK slot returns to empty state" 1923 << " set = " << r_icache_clack_set.read() 1924 << " / way = " << r_icache_clack_way.read() << std::endl; 1925 } 1926 #endif 1927 1928 break; 1929 } 1884 1930 1885 1931 // Match between MISS address and CC address … … 1921 1967 } 1922 1968 1923 // CLACK handler 1924 // We switch the directory slot to EMPTY state 1925 // and reset r_icache_miss_clack if the cleanup ack 1926 // is matching a pending miss. 1927 if ( r_icache_clack_req.read() ) 1928 { 1929 1930 if ( m_ireq.valid ) m_cost_ins_miss_frz++; 1931 1932 #ifdef INSTRUMENTATION 1933 m_cpt_icache_dir_write++; 1934 #endif 1935 r_icache.write_dir( 0, 1936 r_icache_clack_way.read(), 1937 r_icache_clack_set.read(), 1938 CACHE_SLOT_STATE_EMPTY); 1939 1940 if ( (r_icache_miss_set.read() == r_icache_clack_set.read()) and 1941 (r_icache_miss_way.read() == r_icache_clack_way.read()) ) 1942 { 1943 r_icache_miss_clack = false; 1944 } 1945 1946 r_icache_clack_req = false; 1947 1948 // return to cc_save state if no pending CC request 1949 if ( not r_cc_receive_icache_req.read() ) 1950 r_icache_fsm = r_icache_fsm_save.read(); 1951 1952 #if DEBUG_ICACHE 1953 if ( m_debug_activated ) 1954 { 1955 std::cout << " <PROC " << name() 1956 << " ICACHE_CC_CHECK> CC_TYPE_CLACK slot returns to empty state" 1957 << " set = " << r_icache_clack_set.read() 1958 << " / way = " << r_icache_clack_way.read() << std::endl; 1959 } 1960 #endif 1961 1962 break; 1963 } 1964 1965 // wait if pending request to CC_SEND. This way if there are pending 1966 // CLACK they can be treated in this state and then a deadlock 1967 // situation is avoided 1968 if ( r_icache_cc_send_req.read() ) break; 1969 assert ( not r_icache_cc_send_req.read() and "CC_SEND must be available in ICACHE_CC_CHECK"); 1969 1970 1970 1971 // CC request handler … … 2418 2419 } 2419 2420 // coherence request (from CC_RECEIVE FSM) 2420 else if ( r_cc_receive_dcache_req.read() )2421 else if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 2421 2422 { 2422 2423 r_dcache_fsm = DCACHE_CC_CHECK; … … 3057 3058 3058 3059 // coherence request (from CC_RECEIVE FSM) 3059 if ( r_cc_receive_dcache_req.read() )3060 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3060 3061 { 3061 3062 r_dcache_fsm = DCACHE_CC_CHECK; … … 3369 3370 3370 3371 // coherence request (from CC_RECEIVE FSM) 3371 if ( r_cc_receive_dcache_req.read() )3372 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3372 3373 { 3373 3374 r_dcache_fsm = DCACHE_CC_CHECK; … … 3737 3738 3738 3739 // coherence request (from CC_RECEIVE FSM) 3739 if ( r_cc_receive_dcache_req.read() )3740 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3740 3741 { 3741 3742 r_dcache_fsm = DCACHE_CC_CHECK; … … 3816 3817 3817 3818 // coherence request (from CC_RECEIVE FSM) 3818 if ( r_cc_receive_dcache_req.read() )3819 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3819 3820 { 3820 3821 r_dcache_fsm = DCACHE_CC_CHECK; … … 3846 3847 3847 3848 // coherence request (from CC_RECEIVE FSM) 3848 if ( r_cc_receive_dcache_req.read() )3849 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3849 3850 { 3850 3851 r_dcache_fsm = DCACHE_CC_CHECK; … … 3889 3890 3890 3891 // coherence request (from CC_RECEIVE FSM) 3891 if ( r_cc_receive_dcache_req.read() )3892 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 3892 3893 { 3893 3894 r_dcache_fsm = DCACHE_CC_CHECK; … … 3980 3981 size_t set; 3981 3982 size_t word; 3983 3982 3984 r_dcache.read_neutral(r_dcache_xtn_flush_addr_data.read(), 3983 3985 &rdata, … … 3999 4001 } 4000 4002 } 4003 // else if ( r_dcache_clack_req.read() ) 4004 // { 4005 // r_dcache_fsm = DCACHE_CC_CHECK; 4006 // r_dcache_fsm_cc_save = r_dcache_fsm.read(); 4007 // break; 4008 // } 4001 4009 break; 4002 4010 } … … 4311 4319 4312 4320 // coherence request (from CC_RECEIVE FSM) 4313 if ( r_cc_receive_dcache_req.read() )4321 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 4314 4322 { 4315 4323 r_dcache_fsm = DCACHE_CC_CHECK; … … 4318 4326 } 4319 4327 4320 if ( not r_dcache_cc_send_req.read() ) // blocked until previous cc_send request is sent4321 {4322 4328 bool found = false; 4323 4329 bool cleanup = false; … … 4326 4332 paddr_t victim = 0; 4327 4333 int state; 4334 bool s_cleanup_updt_data = false; 4335 bool s_cleanup_line_ncc = false; 4328 4336 4329 4337 #ifdef INSTRUMENTATION … … 4347 4355 r_dcache_miss_clack = true; 4348 4356 r_dcache_fsm = DCACHE_MISS_CLEAN; 4349 // request cleanup4350 r_dcache_cc_send_req = true;4351 r_dcache_cc_send_nline = victim;4352 r_dcache_cc_send_way = way;4353 r_dcache_cc_send_type = CC_TYPE_CLEANUP;4354 4357 if( (state == CACHE_SLOT_STATE_VALID_NCC) )//and (r_dcache_content_state[way*m_dcache_sets+set] == LINE_CACHE_DATA_DIRTY) ) 4355 4358 { 4356 4359 //MODIFIER POUR DIRTY BIT // 4357 r_dcache_cc_cleanup_line_ncc = true;4360 s_cleanup_line_ncc = true; 4358 4361 r_dcache_miss_data_addr = (victim*m_dcache_words)*4; 4359 4362 //if ((r_dcache_content_state[way*m_dcache_sets+set] != LINE_CACHE_DATA_NOT_DIRTY))//must send data 4360 4363 if (true)//must send data 4361 4364 { 4362 r_dcache_cc_cleanup_updt_data = true;4365 s_cleanup_updt_data = true; 4363 4366 for (size_t w = 0; w< m_dcache_words; w++) 4364 4367 { … … 4369 4372 else 4370 4373 { 4371 r_dcache_cc_cleanup_updt_data = false;4374 s_cleanup_updt_data = false; 4372 4375 } 4373 4376 … … 4378 4381 else 4379 4382 { 4380 r_dcache_cc_cleanup_line_ncc = false; 4381 r_dcache_cc_cleanup_updt_data = false; 4383 s_cleanup_line_ncc = false; 4384 s_cleanup_updt_data = false; 4385 } 4386 4387 if( not r_dcache_cc_send_req.read() ) 4388 { 4389 // request cleanup 4390 r_dcache_cc_send_req = true; 4391 r_dcache_cc_send_nline = victim; 4392 r_dcache_cc_send_way = way; 4393 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 4394 r_dcache_cc_cleanup_updt_data = s_cleanup_updt_data; 4395 r_dcache_cc_cleanup_line_ncc = s_cleanup_line_ncc; 4396 } 4397 else 4398 { 4399 r_dcache_cleanup_victim_nline = victim; 4400 r_dcache_cleanup_victim_req = true; 4401 r_dcache_cleanup_victim_updt_data = s_cleanup_updt_data; 4402 r_dcache_cleanup_victim_line_ncc = s_cleanup_line_ncc; 4403 std::cout << " <PROC " << name() 4404 << "/ CYCLE = " 4405 << m_cpt_total_cycles 4406 << std :: endl; 4382 4407 } 4383 4408 } … … 4400 4425 #endif 4401 4426 } // end found 4402 }4403 4427 break; 4404 4428 } … … 4410 4434 size_t set; 4411 4435 size_t word; 4436 4437 if( r_dcache_cleanup_victim_req.read() and not r_dcache_cc_send_req.read() ) 4438 { 4439 r_dcache_cc_send_req = true; 4440 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 4441 r_dcache_cc_send_nline = r_dcache_cleanup_victim_nline.read(); 4442 r_dcache_cleanup_victim_req = false; 4443 r_dcache_cc_cleanup_updt_data = r_dcache_cleanup_victim_updt_data.read(); 4444 r_dcache_cc_cleanup_line_ncc = r_dcache_cleanup_victim_line_ncc.read(); 4445 r_dcache_cc_send_way = r_dcache_miss_way; 4446 } 4412 4447 4413 4448 r_dcache.read_neutral(r_dcache_miss_data_addr, … … 4430 4465 } 4431 4466 } 4467 // else if ( r_dcache_clack_req.read() ) 4468 // { 4469 // r_dcache_fsm = DCACHE_CC_CHECK; 4470 // r_dcache_fsm_cc_save = r_dcache_fsm.read(); 4471 // break; 4472 // } 4473 4432 4474 break; 4433 4475 } … … 4495 4537 { 4496 4538 if ( m_dreq.valid) m_cost_data_miss_frz++; 4539 4540 if( r_dcache_cleanup_victim_req.read() and not r_dcache_cc_send_req.read() ) 4541 { 4542 r_dcache_cc_send_req = true; 4543 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 4544 r_dcache_cc_send_nline = r_dcache_cleanup_victim_nline.read(); 4545 r_dcache_cleanup_victim_req = false; 4546 r_dcache_cc_cleanup_updt_data = r_dcache_cleanup_victim_updt_data.read(); 4547 r_dcache_cc_cleanup_line_ncc = r_dcache_cleanup_victim_line_ncc.read(); 4548 r_dcache_cc_send_way = r_dcache_miss_way; 4549 } 4550 4497 4551 // coherence clack request (from DSPIN CLACK) 4498 4552 if ( r_dcache_clack_req.read() ) … … 4504 4558 4505 4559 // coherence request (from CC_RECEIVE FSM) 4506 if ( r_cc_receive_dcache_req.read() )4560 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read() and not r_dcache_cleanup_victim_req.read() ) 4507 4561 { 4508 4562 r_dcache_fsm = DCACHE_CC_CHECK; … … 4623 4677 if ( m_dreq.valid) m_cost_data_miss_frz++; 4624 4678 4679 if( r_dcache_cleanup_victim_req.read() and not r_dcache_cc_send_req.read() ) 4680 { 4681 r_dcache_cc_send_req = true; 4682 r_dcache_cc_send_type = CC_TYPE_CLEANUP; 4683 r_dcache_cc_send_nline = r_dcache_cleanup_victim_nline.read(); 4684 r_dcache_cleanup_victim_req = false; 4685 r_dcache_cc_cleanup_updt_data = r_dcache_cleanup_victim_updt_data.read(); 4686 r_dcache_cc_cleanup_line_ncc = r_dcache_cleanup_victim_line_ncc.read(); 4687 r_dcache_cc_send_way = r_dcache_miss_way; 4688 } 4689 4625 4690 // coherence clack request (from DSPIN CLACK) 4626 4691 if ( r_dcache_clack_req.read() ) … … 4632 4697 4633 4698 // coherence request (from CC_RECEIVE FSM) 4634 if ( r_cc_receive_dcache_req.read() )4699 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read() and not r_dcache_cleanup_victim_req.read() ) 4635 4700 { 4636 4701 r_dcache_fsm = DCACHE_CC_CHECK; … … 4736 4801 4737 4802 // coherence request (from CC_RECEIVE FSM) 4738 if ( r_cc_receive_dcache_req.read() )4803 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 4739 4804 { 4740 4805 r_dcache_fsm = DCACHE_CC_CHECK; … … 4781 4846 4782 4847 // coherence request (from CC_RECEIVE FSM) 4783 if ( r_cc_receive_dcache_req.read() )4848 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 4784 4849 { 4785 4850 r_dcache_fsm = DCACHE_CC_CHECK; … … 4835 4900 4836 4901 // coherence request (from CC_RECEIVE FSM) 4837 if ( r_cc_receive_dcache_req.read() )4902 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 4838 4903 { 4839 4904 r_dcache_fsm = DCACHE_CC_CHECK; … … 4954 5019 4955 5020 // coherence request (from CC_RECEIVE FSM) 4956 if ( r_cc_receive_dcache_req.read() )5021 if ( r_cc_receive_dcache_req.read() and not r_dcache_cc_send_req.read()) 4957 5022 { 4958 5023 r_dcache_fsm = DCACHE_CC_CHECK; … … 5045 5110 } 5046 5111 #endif 5112 // CLACK handler 5113 // We switch the directory slot to EMPTY state and reset 5114 // r_dcache_miss_clack if the cleanup ack is matching a pending miss. 5115 if ( r_dcache_clack_req.read() ) 5116 { 5117 if ( m_dreq.valid ) m_cost_data_miss_frz++; 5118 5119 #ifdef INSTRUMENTATION 5120 m_cpt_dcache_dir_write++; 5121 #endif 5122 r_dcache.write_dir( 0, 5123 r_dcache_clack_way.read(), 5124 r_dcache_clack_set.read(), 5125 CACHE_SLOT_STATE_EMPTY); 5126 5127 if ( (r_dcache_miss_set.read() == r_dcache_clack_set.read()) and 5128 (r_dcache_miss_way.read() == r_dcache_clack_way.read()) ) 5129 { 5130 r_dcache_miss_clack = false; 5131 } 5132 5133 r_dcache_clack_req = false; 5134 5135 // return to cc_save state 5136 r_dcache_fsm = r_dcache_fsm_cc_save.read() ; 5137 5138 #if DEBUG_DCACHE 5139 if ( m_debug_activated ) 5140 { 5141 std::cout << " <PROC " << name() 5142 << " DCACHE_CC_CHECK> CC_TYPE_CLACK Switch slot to EMPTY state" 5143 << " set = " << r_dcache_clack_set.read() 5144 << " / way = " << r_dcache_clack_way.read() << std::endl; 5145 } 5146 #endif 5147 break; 5148 } 5047 5149 5048 5150 … … 5086 5188 } 5087 5189 5088 // CLACK handler 5089 // We switch the directory slot to EMPTY state and reset 5090 // r_dcache_miss_clack if the cleanup ack is matching a pending miss. 5091 if ( r_dcache_clack_req.read() ) 5092 { 5093 if ( m_dreq.valid ) m_cost_data_miss_frz++; 5094 5095 #ifdef INSTRUMENTATION 5096 m_cpt_dcache_dir_write++; 5097 #endif 5098 r_dcache.write_dir( 0, 5099 r_dcache_clack_way.read(), 5100 r_dcache_clack_set.read(), 5101 CACHE_SLOT_STATE_EMPTY); 5102 5103 if ( (r_dcache_miss_set.read() == r_dcache_clack_set.read()) and 5104 (r_dcache_miss_way.read() == r_dcache_clack_way.read()) ) 5105 { 5106 r_dcache_miss_clack = false; 5107 } 5108 5109 r_dcache_clack_req = false; 5110 5111 // return to cc_save state if no pending CC request 5112 if ( not r_cc_receive_dcache_req.read() ) 5113 { 5114 r_dcache_fsm = r_dcache_fsm_cc_save.read() ; 5115 } 5116 5117 #if DEBUG_DCACHE 5118 if ( m_debug_activated ) 5119 { 5120 std::cout << " <PROC " << name() 5121 << " DCACHE_CC_CHECK> CC_TYPE_CLACK Switch slot to EMPTY state" 5122 << " set = " << r_dcache_clack_set.read() 5123 << " / way = " << r_dcache_clack_way.read() << std::endl; 5124 } 5125 #endif 5126 break; 5127 } 5128 5129 // wait if pending request to CC_SEND. This way if there are pending 5130 // CLACK they can be treated in this state and then a deadlock 5131 // situation is avoided 5132 if ( r_dcache_cc_send_req.read() ) break; 5190 5191 assert ( not r_dcache_cc_send_req.read() and "CC_SEND must be available in DCACHE_CC_CHECK" ); 5133 5192 5134 5193 // CC request handler … … 5943 6002 if (p_vci.rspval.read()) 5944 6003 { 6004 /**/ 6005 if( p_vci.reop.read() ==0) 6006 { 6007 std::cout << "PROC " << m_srcid 6008 << "/ CYCLE " << m_cpt_total_cycles 6009 <<std::endl; 6010 } 5945 6011 assert( p_vci.reop.read() and 5946 6012 "a VCI response packet must contain one flit for a write transaction"); … … 6153 6219 // flip_flop to check that ? 6154 6220 if (not (r_cc_receive_icache_req.read()) and 6155 not (r_cc_receive_dcache_req.read()) and 6221 not (r_cc_receive_dcache_req.read()) and 6156 6222 (p_dspin_m2p.write.read())) 6157 6223 { … … 6193 6259 uint64_t receive_data = p_dspin_m2p.data.read(); 6194 6260 // for data INVAL, wait for dcache to take the request 6195 if (p_dspin_m2p.write.read() and not r_cc_receive_dcache_req.read()) 6261 if (p_dspin_m2p.write.read() and 6262 not r_cc_receive_dcache_req.read() ) 6196 6263 { 6197 6264 // request dcache to handle the INVAL … … 6211 6278 uint64_t receive_data = p_dspin_m2p.data.read(); 6212 6279 // for ins INVAL, wait for icache to take the request 6213 if (p_dspin_m2p.write.read() and not r_cc_receive_icache_req.read()) 6280 if (p_dspin_m2p.write.read() and 6281 not r_cc_receive_icache_req.read() ) 6214 6282 { 6215 6283 // request icache to handle the INVAL … … 6261 6329 // for data INVAL, wait for dcache to take the request and fifo to 6262 6330 // be empty 6263 if ( r_cc_receive_updt_fifo_be.empty() and 6331 if ( r_cc_receive_updt_fifo_be.empty() and 6264 6332 p_dspin_m2p.write.read() ) 6265 6333 { … … 6281 6349 // for ins INVAL, wait for icache to take the request and fifo to be 6282 6350 // empty 6283 if ( r_cc_receive_updt_fifo_be.empty() and 6351 if ( r_cc_receive_updt_fifo_be.empty() and 6284 6352 p_dspin_m2p.write.read() ) 6285 6353 { -
Property
svn:mergeinfo
set to
(toggle deleted branches)
Note: See TracChangeset
for help on using the changeset viewer.