Ignore:
Timestamp:
Jun 16, 2010, 1:52:39 PM (14 years ago)
Author:
guthmull
Message:

SC don't generate invalidations and cleanup any more, add treatment of coherence requests in blocking fsm states

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_cc_vcache_wrapper2_v1/caba/source/src/vci_cc_vcache_wrapper2_v1.cpp

    r55 r56  
    40594059    case DCACHE_ITLB_INVAL:
    40604060    {
     4061        // external cache invalidate request
     4062        if ( r_tgt_dcache_req )   
     4063        {
     4064            r_dcache_fsm = DCACHE_CC_CHECK;
     4065            r_dcache_fsm_save = r_dcache_fsm;
     4066            break;
     4067        } 
    40614068        if ( !r_dcache_xtn_req )
    40624069        {
     
    42384245    case DCACHE_DCACHE_SYNC:
    42394246    {
     4247        // external cache invalidate request
     4248        if ( r_tgt_dcache_req )   
     4249        {
     4250            r_dcache_fsm = DCACHE_CC_CHECK;
     4251            r_dcache_fsm_save = r_dcache_fsm;
     4252            break;
     4253        } 
    42404254        if ( !r_dcache_write_req )
    42414255        {
     
    44024416            }
    44034417
    4404             if(dreq.type == iss_t::DATA_SC)
    4405             {
    4406                 if(r_dcache_cleanup_req) break;
    4407                 size_t way = 0;
    4408                 size_t set = 0;
    4409                 // Simulate an invalidate request
    4410                 r_dcache_cleanup_req = r_dcache.inval(r_dcache_paddr_save, &way, &set);        //   !!!!!!!!!
    4411                 r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words)+2);
    4412                 m_cpt_cc_cleanup_data++;
    4413                
    4414                 if ( r_dcache_in_itlb[way*m_dcache_sets+set] || r_dcache_in_dtlb[way*m_dcache_sets+set] )
    4415                 {       
    4416                     // ins tlb invalidate verification
    4417                     r_dcache_itlb_inval_req = r_dcache_in_itlb[way*m_dcache_sets+set];
    4418                     r_dcache_itlb_inval_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words)+2);
    4419                     r_dcache_in_itlb[way*m_dcache_sets+set] = false;
    4420                
    4421                     // data tlb invalidate verification
    4422                     r_dcache_dtlb_inval_req = r_dcache_in_dtlb[way*m_dcache_sets+set];
    4423                     r_dcache_dtlb_inval_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words)+2);
    4424                     r_dcache_in_dtlb[way*m_dcache_sets+set] = false;
    4425                     r_dcache_fsm = DCACHE_TLB_CC_INVAL;
    4426                     r_dcache_fsm_save = r_dcache_fsm;
    4427                     break;
    4428                 }
    4429 
    4430             }           
    44314418            drsp.valid = true;
    44324419            drsp.rdata = r_dcache_miss_buf[0];
     
    49694956
    49704957        if (((r_dcache_fsm_save == DCACHE_BIS)||(r_dcache_fsm_save == DCACHE_MISS_WAIT) ||
    4971              (r_dcache_fsm_save == DCACHE_UNC_WAIT)||(r_dcache_fsm_save == DCACHE_MISS_UPDT)) &&
     4958             (r_dcache_fsm_save == DCACHE_MISS_UPDT)) &&
    49724959             (r_dcache_tlb_nline.read() == r_dcache_dtlb_inval_line.read()))
    49734960        {
Note: See TracChangeset for help on using the changeset viewer.