Changeset 18 for trunk


Ignore:
Timestamp:
Apr 12, 2010, 12:41:25 AM (15 years ago)
Author:
gao
Message:

Bug correction

File:
1 edited

Legend:

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

    r4 r18  
    10731073                r_itlb_read_dcache_req = true;
    10741074                r_icache_vaddr_req = ireq.addr;
     1075                r_itlb_k_read_dcache = true;
    10751076                r_icache_fsm = ICACHE_TLB2_READ;
    10761077                m_cpt_ins_tlb_miss++;
     
    16751676        if ( r_tgt_icache_req )
    16761677        {
    1677             r_tgt_icache_req = false;
     1678            r_icache_fsm = ICACHE_CC_INVAL;
     1679            r_icache_fsm_save = r_icache_fsm;
     1680            m_cost_ins_waste_wait_frz++;
     1681            break;         
    16781682        }
    16791683
     
    17351739    {   
    17361740        if ( ireq.valid ) m_cost_ins_waste_wait_frz++;
     1741        // external cache invalidate request
     1742        if ( r_tgt_icache_req )
     1743        {
     1744            r_icache_fsm = ICACHE_CC_INVAL;
     1745            r_icache_fsm_save = r_icache_fsm;
     1746            m_cost_ins_waste_wait_frz++;
     1747            break;         
     1748        }
    17371749
    17381750        paddr_t ipaddr = 0;                     
     
    17641776    case ICACHE_CACHE_INVAL_PA:
    17651777    {   
     1778        // external cache invalidate request
     1779        if ( r_tgt_icache_req )
     1780        {
     1781            r_icache_fsm = ICACHE_CC_INVAL;
     1782            r_icache_fsm_save = r_icache_fsm;
     1783            m_cost_ins_waste_wait_frz++;
     1784            break;         
     1785        }   
     1786
    17661787        paddr_t ipaddr = (paddr_t)r_mmu_word_hi.read() << 32 | r_mmu_word_lo.read();
    17671788
     
    21722193
    21732194            bool itlb_hit_dcache = r_dcache.read(r_icache_paddr_save, &rsp_itlb_miss);
    2174             if ( (r_icache_fsm == ICACHE_TLB2_READ) && itlb_hit_dcache )
     2195            if ( r_itlb_k_read_dcache && itlb_hit_dcache )
    21752196            {   
     2197                r_itlb_k_read_dcache = false;
    21762198                bool itlb_hit_ppn = r_dcache.read(r_icache_paddr_save.read()+4, &rsp_itlb_ppn);
    21772199                assert(itlb_hit_ppn && "Address of pte[64-32] and pte[31-0] should be successive");
     
    39954017        if ( r_tgt_dcache_req )
    39964018        {
    3997             r_tgt_dcache_req = false;
     4019            r_dcache_fsm = DCACHE_CC_CHECK;
     4020            r_dcache_fsm_save = r_dcache_fsm;     
     4021            m_cost_data_waste_wait_frz++;
     4022            break;
    39984023        }   
    39994024
     
    40634088    case DCACHE_DCACHE_INVAL:
    40644089    {
     4090        // external cache invalidate request
     4091        if ( r_tgt_dcache_req )
     4092        {
     4093            r_dcache_fsm = DCACHE_CC_CHECK;
     4094            r_dcache_fsm_save = r_dcache_fsm;     
     4095            m_cost_data_waste_wait_frz++;
     4096            break;
     4097        }   
     4098
    40654099        m_cpt_dcache_dir_read += m_dcache_ways;
    40664100        vaddr_t invadr = dreq.wdata;
     
    41114145    case DCACHE_DCACHE_INVAL_PA:
    41124146    {
     4147        // external cache invalidate request
     4148        if ( r_tgt_dcache_req )
     4149        {
     4150            r_dcache_fsm = DCACHE_CC_CHECK;
     4151            r_dcache_fsm_save = r_dcache_fsm;     
     4152            m_cost_data_waste_wait_frz++;
     4153            break;
     4154        }           
    41134155        m_cpt_dcache_dir_read += m_dcache_ways;
    41144156        paddr_t dpaddr = (paddr_t)r_mmu_word_hi.read() << 32 | r_mmu_word_lo.read();
     
    43054347            if ( r_dcache_inval_tlb_rsp ) // Miss read response and tlb invalidation
    43064348            {
    4307                 r_dcache_fsm = DCACHE_IDLE;
    43084349                r_dcache_inval_tlb_rsp = false;
    4309                 break;
    43104350            }
    43114351
     
    48124852        }
    48134853
    4814             r_dtlb_translation_valid = false;
    4815             r_dcache_ptba_ok = false;
    48164854        if ( !r_dcache_cc_check )
    48174855        {
     
    48234861            r_dcache_cc_check = false;
    48244862        }
     4863        r_dtlb_translation_valid = false;
     4864        r_dcache_ptba_ok = false;
    48254865        break;
    48264866    }
Note: See TracChangeset for help on using the changeset viewer.