Changeset 338
- Timestamp:
- Mar 28, 2013, 2:12:01 PM (12 years ago)
- Location:
- branches/v5/modules
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/v5/modules/vci_cc_vcache_wrapper_dspin_coherence/caba/source/src/vci_cc_vcache_wrapper_dspin_coherence.cpp
r336 r338 2861 2861 size_t set; 2862 2862 size_t word; 2863 2864 bool hit = r_dcache.read( r_dcache_tlb_paddr.read(), 2865 &entry, 2866 &way, 2867 &set, 2868 &word ); 2863 int cache_state; 2864 r_dcache.read( r_dcache_tlb_paddr.read(), 2865 &entry, 2866 &way, 2867 &set, 2868 &word, 2869 &cache_state ); 2869 2870 #ifdef INSTRUMENTATION 2870 2871 m_cpt_dcache_data_read++; 2871 2872 m_cpt_dcache_dir_read++; 2872 2873 #endif 2873 if ( hit ) //hit in dcache2874 if ( cache_state == CACHE_SLOT_STATE_VALID ) // hit in dcache 2874 2875 { 2875 2876 if ( not (entry & PTE_V_MASK) ) // unmapped … … 2960 2961 #endif 2961 2962 } 2963 } 2964 else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup 2965 { 2966 // stalled until cleanup is acknowledged 2967 r_dcache_fsm = DCACHE_TLB_PTE1_GET; 2962 2968 } 2963 2969 else // we must load the missing cache line in dcache … … 3136 3142 size_t set; 3137 3143 size_t word; 3138 3139 bool hit = r_dcache.read( r_dcache_tlb_paddr.read(), 3140 &pte_flags, 3141 &pte_ppn, 3142 &way, 3143 &set, 3144 &word ); 3144 int cache_state; 3145 3146 r_dcache.read( r_dcache_tlb_paddr.read(), 3147 &pte_flags, 3148 &pte_ppn, 3149 &way, 3150 &set, 3151 &word, 3152 &cache_state ); 3145 3153 #ifdef INSTRUMENTATION 3146 3154 m_cpt_dcache_data_read++; 3147 3155 m_cpt_dcache_dir_read++; 3148 3156 #endif 3149 if ( hit ) // request hitsin dcache3157 if ( cache_state == CACHE_SLOT_STATE_VALID ) // hit in dcache 3150 3158 { 3151 3159 if ( not (pte_flags & PTE_V_MASK) ) // unmapped … … 3162 3170 r_mmu_detr = MMU_READ_PT2_UNMAPPED; 3163 3171 r_mmu_dbvar = r_dcache_tlb_vaddr.read(); 3164 m_drsp.valid 3165 m_drsp.error 3172 m_drsp.valid = true; 3173 m_drsp.error = true; 3166 3174 } 3167 r_dcache_fsm = DCACHE_IDLE;3175 r_dcache_fsm = DCACHE_IDLE; 3168 3176 3169 3177 #if DEBUG_DCACHE … … 3196 3204 #endif 3197 3205 } 3206 } 3207 else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup 3208 { 3209 // stalled until cleanup is acknowledged 3210 r_dcache_fsm = DCACHE_TLB_PTE2_GET; 3198 3211 } 3199 3212 else // we must load the missing cache line in dcache -
branches/v5/modules/vci_mem_cache_dspin_coherence/caba/source/src/vci_mem_cache_dspin_coherence.cpp
r336 r338 1336 1336 } 1337 1337 #endif 1338 /*1339 if(m_monitor_ok)1340 {1341 char buf[80];1342 snprintf(buf, 80, "READ_IDLE srcid %d, ins %d", m_cmd_read_srcid_fifo.read(), m_cmd_read_pktid_fifo.read()&0x2);1343 check_monitor_read(buf, m_cmd_read_addr_fifo.read());1344 }1345 */1346 1338 r_read_fsm = READ_DIR_REQ; 1347 1339 } … … 1461 1453 // TYPE_READ_INS_UNC 0bX010 with TSAR encoding 1462 1454 // TYPE_READ_INS_MISS 0bX011 with TSAR encoding 1463 bool inst_read = ( m_cmd_read_pktid_fifo.read() & 0x2);1455 bool inst_read = ((m_cmd_read_pktid_fifo.read() & 0x2) != 0); 1464 1456 // check if this is a cached read, this means pktid is either 1465 1457 // TYPE_READ_DATA_MISS 0bX001 with TSAR encoding … … 1518 1510 std::cout 1519 1511 << " <MEMC " << name() << ".READ_DIR_HIT> Update directory entry:" 1520 << " set = " << std::dec << set 1512 << " addr = " << std::hex << m_cmd_read_addr_fifo.read() 1513 << " / set = " << std::dec << set 1521 1514 << " / way = " << way 1522 1515 << " / owner_id = " << entry.owner.srcid … … 1526 1519 } 1527 1520 #endif 1521 /**/ 1522 if(m_monitor_ok) 1523 { 1524 char buf[80]; 1525 snprintf(buf, 80, "READ_DIR_HIT srcid %d, ins %d", m_cmd_read_srcid_fifo.read(), ((m_cmd_read_pktid_fifo.read()&0x2)!=0)); 1526 check_monitor_read(buf, m_cmd_read_addr_fifo.read()); 1527 } 1528 /**/ 1528 1529 1529 1530 m_cache_directory.write(set, way, entry); … … 1537 1538 // Get the lock to the HEAP directory 1538 1539 { 1540 /**/ 1541 if(m_monitor_ok) 1542 { 1543 char buf[80]; 1544 snprintf(buf, 80, "READ_HEAP_REQ srcid %d, ins %d", m_cmd_read_srcid_fifo.read(), ((m_cmd_read_pktid_fifo.read()&0x2)!=0)); 1545 check_monitor_read(buf, m_cmd_read_addr_fifo.read()); 1546 } 1547 /**/ 1539 1548 if(r_alloc_heap_fsm.read() == ALLOC_HEAP_READ) 1540 1549 { … … 1668 1677 heap_entry.owner.cache_id = m_cmd_read_pktid_fifo.read(); 1669 1678 #endif 1670 heap_entry.owner.inst = ( m_cmd_read_pktid_fifo.read() & 0x2);1679 heap_entry.owner.inst = ((m_cmd_read_pktid_fifo.read() & 0x2) != 0); 1671 1680 1672 1681 if(r_read_count.read() == 1) // creation of a new linked list … … 3479 3488 << " way = " << std::dec << way 3480 3489 << " / set = " << set 3490 << " / owner_id = " << entry.owner.srcid 3491 << " / owner_ins = " << entry.owner.inst 3481 3492 << " / count = " << entry.count 3482 3493 << " / is_cnt = " << entry.is_cnt << std::endl; … … 4116 4127 << " hit but copy not found" 4117 4128 << std::endl; 4118 4129 /**/ 4130 std::cout 4131 << "r_cleanup_srcid = " << r_cleanup_srcid.read() 4132 << " / r_cleanup_inst = " << r_cleanup_inst.read() << std::endl 4133 << "r_cleanup_copy = " << r_cleanup_copy.read() 4134 << " / r_cleanup_copy_inst = " << r_cleanup_copy_inst.read() << std::endl 4135 << "heap_entry.owner.srcid = " << heap_entry.owner.srcid 4136 << " / heap_entry.owner.inst = " << heap_entry.owner.inst << std::endl; 4137 /**/ 4119 4138 exit(0); 4120 4139 } … … 4127 4146 << " two copies matching the cleanup owner id" 4128 4147 << std::endl; 4148 /**/ 4149 std::cout 4150 << "r_cleanup_srcid = " << r_cleanup_srcid.read() 4151 << " / r_cleanup_inst = " << r_cleanup_inst.read() << std::endl 4152 << "r_cleanup_copy = " << r_cleanup_copy.read() 4153 << " / r_cleanup_copy_inst = " << r_cleanup_copy_inst.read() << std::endl 4154 << "heap_entry.owner.srcid = " << heap_entry.owner.srcid 4155 << " / heap_entry.owner.inst = " << heap_entry.owner.inst << std::endl; 4156 /**/ 4129 4157 4130 4158 exit(0);
Note: See TracChangeset
for help on using the changeset viewer.