Ignore:
Timestamp:
Jun 13, 2010, 8:29:15 AM (14 years ago)
Author:
gao
Message:

Activity counter update

Location:
trunk/modules/vci_cc_vcache_wrapper_v1/caba/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_cc_vcache_wrapper_v1/caba/source/include/vci_cc_vcache_wrapper_v1.h

    r38 r48  
    313313    sc_signal<size_t>       r_dcache_way;
    314314    sc_signal<size_t>       r_dcache_set;
    315     sc_signal<bool>         r_dcache_cleanup_check_req;
    316315    sc_signal<bool>         r_dcache_cleanup_req;
    317316    sc_signal<data_t>       r_dcache_cleanup_line;
     
    347346    sc_signal<size_t>       r_icache_way;
    348347    sc_signal<size_t>       r_icache_set;
    349     sc_signal<bool>         r_icache_cleanup_check_req;
    350348    sc_signal<bool>         r_icache_cleanup_req;
    351349    sc_signal<data_t>       r_icache_cleanup_line;
     
    383381    sc_signal<bool>         r_tgt_icache_req;
    384382    sc_signal<bool>         r_tgt_dcache_req;
    385     sc_signal<bool>         r_tgt_icache_tlb_req;
    386     sc_signal<bool>         r_tgt_dcache_tlb_req;
    387383    sc_signal<bool>         r_tgt_icache_rsp;
    388384    sc_signal<bool>         r_tgt_dcache_rsp;
     
    440436    uint32_t m_cost_unc_read_frz;           // number of frozen cycles related to uncached read of cache
    441437    uint32_t m_cost_ins_miss_frz;           // number of frozen cycles related to ins miss of cache
    442     uint32_t m_cost_cc_wait_frz;            // number of frozen cycles related to cc check
    443438
    444439    uint32_t m_cpt_imiss_transaction;       // number of VCI instruction miss transactions
     
    446441    uint32_t m_cpt_unc_transaction;         // number of VCI uncached read transactions
    447442    uint32_t m_cpt_write_transaction;       // number of VCI write transactions
     443    uint32_t m_cpt_icache_unc_transaction;  // number of VCI instruction uncached transactions
    448444
    449445    uint32_t m_cost_imiss_transaction;      // cumulated duration for VCI IMISS transactions
    450446    uint32_t m_cost_dmiss_transaction;      // cumulated duration for VCI DMISS transactions
    451447    uint32_t m_cost_unc_transaction;        // cumulated duration for VCI UNC transactions
     448    uint32_t m_cost_icache_unc_transaction; // cumulated duration for VCI IUNC transactions   
    452449    uint32_t m_cost_write_transaction;      // cumulated duration for VCI WRITE transactions
    453450    uint32_t m_length_write_transaction;    // cumulated length for VCI WRITE transactions
     
    456453    uint32_t m_cpt_ins_tlb_read;            // number of instruction tlb read
    457454    uint32_t m_cpt_ins_tlb_miss;            // number of instruction tlb miss
    458     uint32_t m_cpt_ins_tlb_write_et;        // number of instruction tlb write ET
    459 
     455    uint32_t m_cpt_ins_tlb_update_acc;      // number of instruction tlb update acc
    460456    uint32_t m_cpt_data_tlb_read;           // number of data tlb read
    461457    uint32_t m_cpt_data_tlb_miss;           // number of data tlb miss
    462     uint32_t m_cpt_data_tlb_write_et;       // number of data tlb write ET
    463     uint32_t m_cpt_data_tlb_write_dirty;    // number of data tlb write dirty
     458    uint32_t m_cpt_data_tlb_update_acc;     // number of data tlb update acc
     459    uint32_t m_cpt_data_tlb_update_dirty;   // number of data tlb update dirty
    464460   
    465461    uint32_t m_cost_ins_tlb_miss_frz;       // number of frozen cycles related to instruction tlb miss
    466462    uint32_t m_cost_data_tlb_miss_frz;      // number of frozen cycles related to data tlb miss
    467     uint32_t m_cost_ins_tlb_flush_frz;      // number of cycles for instruction tlb flush
    468     uint32_t m_cost_data_tlb_flush_frz;     // number of cycles for data tlb flush
    469     uint32_t m_cost_ins_cache_flush_frz;    // number of cycles for instruction cache flush
    470     uint32_t m_cost_data_cache_flush_frz;   // number of cycles for data cache flush
    471     uint32_t m_cost_data_waste_wait_frz;
     463    uint32_t m_cost_ins_tlb_update_acc_frz;      // number of cycles for instruction tlb flush
     464    uint32_t m_cost_data_tlb_update_acc_frz;     // number of cycles for data tlb flush
     465    uint32_t m_cost_data_tlb_update_dirty_frz;    // number of cycles for instruction cache flush
    472466
    473467    uint32_t m_cpt_itlbmiss_transaction;    // number of itlb miss transactions
    474     uint32_t m_cpt_itlb_write_transaction;  // number of itlb write ET transactions
     468    uint32_t m_cpt_itlb_ll_transaction;        // number of itlb ll acc transactions
     469    uint32_t m_cpt_itlb_sc_transaction;        // number of itlb sc acc transactions
    475470    uint32_t m_cpt_dtlbmiss_transaction;    // number of dtlb miss transactions
    476     uint32_t m_cpt_dtlb_write_transaction;  // number of dtlb write ET and dirty transactions
     471    uint32_t m_cpt_dtlb_ll_transaction;        // number of dtlb ll acc transactions
     472    uint32_t m_cpt_dtlb_sc_transaction;        // number of dtlb sc acc transactions
     473    uint32_t m_cpt_dtlb_ll_dirty_transaction;  // number of dtlb ll dirty transactions
     474    uint32_t m_cpt_dtlb_sc_dirty_transaction;  // number of dtlb sc dirty transactions   
    477475
    478476    uint32_t m_cost_itlbmiss_transaction;   // cumulated duration for VCI instruction TLB miss transactions
    479     uint32_t m_cost_itlb_write_transaction; // cumulated duration for VCI instruction TLB write ET transactions
     477    uint32_t m_cost_itlb_ll_transaction;      // cumulated duration for VCI instruction TLB ll acc transactions
     478    uint32_t m_cost_itlb_sc_transaction;      // cumulated duration for VCI instruction TLB sc acc transactions
    480479    uint32_t m_cost_dtlbmiss_transaction;   // cumulated duration for VCI data TLB miss transactions
    481     uint32_t m_cost_dtlb_write_transaction; // cumulated duration for VCI data TLB write transactions
    482 
    483     uint32_t m_cpt_cc_update;               // number of coherence update packets
    484     uint32_t m_cpt_cc_inval;                // number of coherence inval packets
    485     uint32_t m_cpt_cc_broadcast;            // number of coherence inval packets
    486 
    487     uint32_t m_cost_cc_update_frz;          // number of waiting cycles for coherence update
    488     uint32_t m_cost_cc_inval_frz;           // number of waiting cycles for coherence invalidate
     480    uint32_t m_cost_dtlb_ll_transaction;      // cumulated duration for VCI data TLB ll acc transactions
     481    uint32_t m_cost_dtlb_sc_transaction;      // cumulated duration for VCI data TLB sc acc transactions
     482    uint32_t m_cost_dtlb_ll_dirty_transaction;// cumulated duration for VCI data TLB ll dirty transactions
     483    uint32_t m_cost_dtlb_sc_dirty_transaction;// cumulated duration for VCI data TLB sc dirty transactions
     484
     485    uint32_t m_cpt_cc_cleanup_ins;
     486    uint32_t m_cpt_cc_cleanup_data;
     487    uint32_t m_cpt_icleanup_transaction;
     488    uint32_t m_cpt_dcleanup_transaction;
     489    uint32_t m_cost_icleanup_transaction;
     490    uint32_t m_cost_dcleanup_transaction;
     491
     492    uint32_t m_cpt_cc_update_data;              // number of coherence update data packets
     493    uint32_t m_cpt_cc_inval_ins;                // number of coherence inval instruction packets
     494    uint32_t m_cpt_cc_inval_data;               // number of coherence inval data packets
     495    uint32_t m_cpt_cc_broadcast;                // number of coherence broadcast packets
    489496
    490497protected:
  • trunk/modules/vci_cc_vcache_wrapper_v1/caba/source/src/vci_cc_vcache_wrapper_v1.cpp

    r38 r48  
    320320              << "- READ RATE              = " << (float)m_cpt_read/run_cycles << std::endl
    321321              << "- WRITE RATE             = " << (float)m_cpt_write/run_cycles << std::endl
    322               << "- UNCACHED READ RATE     = " << (float)m_cpt_unc_read/m_cpt_read << std::endl
    323               << "- CACHED WRITE RATE      = " << (float)m_cpt_write_cached/m_cpt_write << std::endl
    324322              << "- IMISS_RATE             = " << (float)m_cpt_ins_miss/m_cpt_ins_read << std::endl   
    325323              << "- DMISS RATE             = " << (float)m_cpt_data_miss/(m_cpt_read-m_cpt_unc_read) << std::endl
    326324              << "- INS MISS COST          = " << (float)m_cost_ins_miss_frz/m_cpt_ins_miss << std::endl
    327               << "- IMISS TRANSACTION      = " << (float)m_cost_imiss_transaction/m_cpt_imiss_transaction << std::endl
    328               << "- DMISS COST             = " << (float)m_cost_data_miss_frz/m_cpt_data_miss << std::endl
    329               << "- DMISS TRANSACTION      = " << (float)m_cost_dmiss_transaction/m_cpt_dmiss_transaction << std::endl
     325              << "- DATA MISS COST             = " << (float)m_cost_data_miss_frz/m_cpt_data_miss << std::endl
     326              << "- WRITE COST             = " << (float)m_cost_write_frz/m_cpt_write << std::endl
    330327              << "- UNC COST               = " << (float)m_cost_unc_read_frz/m_cpt_unc_read << std::endl
    331               << "- UNC TRANSACTION        = " << (float)m_cost_unc_transaction/m_cpt_unc_transaction << std::endl
    332               << "- WRITE COST             = " << (float)m_cost_write_frz/m_cpt_write << std::endl
    333               << "- WRITE TRANSACTION      = " << (float)m_cost_write_transaction/m_cpt_write_transaction << std::endl
    334               << "- WRITE LENGTH           = " << (float)m_length_write_transaction/m_cpt_write_transaction << std::endl
     328              << "- UNCACHED READ RATE     = " << (float)m_cpt_unc_read/m_cpt_read << std::endl
     329              << "- CACHED WRITE RATE      = " << (float)m_cpt_write_cached/m_cpt_write << std::endl
    335330              << "- INS TLB MISS RATE      = " << (float)m_cpt_ins_tlb_miss/m_cpt_ins_tlb_read << std::endl
    336331              << "- DATA TLB MISS RATE     = " << (float)m_cpt_data_tlb_miss/m_cpt_data_tlb_read << std::endl
     332              << "- ITLB MISS COST         = " << (float)m_cost_ins_tlb_miss_frz/m_cpt_ins_tlb_miss << std::endl
     333              << "- DTLB MISS COST         = " << (float)m_cost_data_tlb_miss_frz/m_cpt_data_tlb_miss << std::endl     
     334              << "- ITLB UPDATE ACC COST   = " << (float)m_cost_ins_tlb_update_acc_frz/m_cpt_ins_tlb_update_acc << std::endl
     335              << "- DTLB UPDATE ACC COST   = " << (float)m_cost_data_tlb_update_acc_frz/m_cpt_data_tlb_update_acc << std::endl
     336              << "- DTLB UPDATE DIRTY COST = " << (float)m_cost_data_tlb_update_dirty_frz/m_cpt_data_tlb_update_dirty << std::endl
     337              << "- NB CC BROADCAST        = " << m_cpt_cc_broadcast << std::endl
     338              << "- NB CC UPDATE DATA      = " << m_cpt_cc_update_data << std::endl
     339              << "- NB CC INVAL DATA       = " << m_cpt_cc_inval_data << std::endl
     340              << "- NB CC INVAL INS        = " << m_cpt_cc_inval_ins << std::endl
     341              << "- NB CC CLEANUP DATA     = " << m_cpt_cc_cleanup_data << std::endl
     342              << "- NB CC CLEANUP INS      = " << m_cpt_cc_cleanup_ins << std::endl
    337343              << "- ITLB MISS TRANSACTION  = " << (float)m_cost_itlbmiss_transaction/m_cpt_itlbmiss_transaction << std::endl
    338               << "- ITLB WRITE TRANSACTION = " << (float)m_cost_itlb_write_transaction/m_cpt_itlb_write_transaction << std::endl
    339               << "- ITLB MISS COST         = " << (float)m_cost_ins_tlb_miss_frz/(m_cpt_ins_tlb_miss+m_cpt_ins_tlb_write_et) << std::endl
    340               << "- DTLB MISS TRANSACTION  = " << (float)m_cost_dtlbmiss_transaction/m_cpt_dtlbmiss_transaction << std::endl
    341               << "- DTLB WRITE TRANSACTION = " << (float)m_cost_dtlb_write_transaction/m_cpt_dtlb_write_transaction << std::endl
    342               << "- DTLB MISS COST         = " << (float)m_cost_data_tlb_miss_frz/(m_cpt_data_tlb_miss+m_cpt_data_tlb_write_et+m_cpt_data_tlb_write_dirty) << std::endl;
     344              << "- DTLB MISS TRANSACTION  = " << (float)m_cost_dtlbmiss_transaction/m_cpt_dtlbmiss_transaction << std::endl;
    343345}
    344346
     
    396398        r_dcache_xtn_req           = false;
    397399
    398         r_icache_cleanup_check_req = false;
     400        r_dcache_dirty_save      = false;
     401        r_dcache_hit_p_save      = false;
     402        r_dcache_cached_save      = false;
     403
     404        r_icache_buf_unc_valid   = false;
     405        r_dcache_buf_unc_valid   = false;
     406
     407        r_vci_rsp_ins_error      = false;
     408        r_vci_rsp_data_error     = false;
     409
     410        r_icache_id1_save        = 0;
     411        r_icache_ppn_save        = 0;
     412        r_icache_vpn_save        = 0;
     413        r_itlb_translation_valid = false;
     414
     415        r_dcache_id1_save        = 0;
     416        r_dcache_ppn_save        = 0;
     417        r_dcache_vpn_save        = 0;
     418        r_dtlb_translation_valid = false;
     419
     420        r_icache_ptba_ok         = false;
     421        r_dcache_ptba_ok         = false;
     422
     423        r_icache_error_type      = MMU_NONE;
     424        r_dcache_error_type      = MMU_NONE;
     425
    399426        r_icache_cleanup_req       = false;
    400427        r_icache_cleanup_type      = NONE;
    401428   
    402         r_dcache_cleanup_check_req = false;
    403429        r_dcache_cleanup_req       = false;
    404430        r_dcache_cleanup_type      = NONE;
     
    428454        r_dcache_inval_tlb_rsp     = false;
    429455
    430         r_dcache_dirty_save      = false;
    431         r_dcache_hit_p_save      = false;
    432 
    433         r_icache_buf_unc_valid   = false;
    434         r_dcache_buf_unc_valid   = false;
    435 
    436         r_vci_rsp_ins_error      = false;
    437         r_vci_rsp_data_error     = false;
    438 
    439         r_icache_id1_save        = 0;
    440         r_icache_ppn_save        = 0;
    441         r_icache_vpn_save        = 0;
    442         r_itlb_translation_valid = false;
    443 
    444         r_dcache_id1_save        = 0;
    445         r_dcache_ppn_save        = 0;
    446         r_dcache_vpn_save        = 0;
    447         r_dtlb_translation_valid = false;
    448 
    449         r_icache_ptba_ok         = false;
    450         r_dcache_ptba_ok         = false;
    451 
    452         r_icache_error_type      = MMU_NONE;
    453         r_dcache_error_type      = MMU_NONE;
    454 
    455456        // activity counters
    456457        m_cpt_dcache_data_read  = 0;
     
    479480        m_cost_ins_miss_frz  = 0;
    480481
    481         m_cpt_imiss_transaction = 0;
    482         m_cpt_dmiss_transaction = 0;
    483         m_cpt_unc_transaction   = 0;
    484         m_cpt_write_transaction = 0;
    485 
    486         m_cost_imiss_transaction   = 0;
    487         m_cost_dmiss_transaction   = 0;
    488         m_cost_unc_transaction     = 0;
    489         m_cost_write_transaction   = 0;
    490         m_length_write_transaction = 0;
     482        m_cpt_imiss_transaction      = 0;
     483        m_cpt_dmiss_transaction      = 0;
     484        m_cpt_unc_transaction        = 0;
     485        m_cpt_write_transaction      = 0;
     486        m_cpt_icache_unc_transaction = 0;
     487
     488        m_cost_imiss_transaction      = 0;
     489        m_cost_dmiss_transaction      = 0;
     490        m_cost_unc_transaction        = 0;
     491        m_cost_write_transaction      = 0;
     492        m_cost_icache_unc_transaction = 0;
     493        m_length_write_transaction    = 0;
    491494
    492495        m_cpt_ins_tlb_read         = 0;             
    493496        m_cpt_ins_tlb_miss         = 0;             
    494         m_cpt_ins_tlb_write_et     = 0;         
    495 
    496         m_cpt_data_tlb_read        = 0;           
    497         m_cpt_data_tlb_miss        = 0;           
    498         m_cpt_data_tlb_write_et    = 0;       
    499         m_cpt_data_tlb_write_dirty = 0;   
    500 
    501         m_cost_ins_tlb_miss_frz    = 0;     
    502         m_cost_data_tlb_miss_frz   = 0;     
    503 
    504         m_cpt_itlbmiss_transaction   = 0;   
    505         m_cpt_itlb_write_transaction = 0; 
    506         m_cpt_dtlbmiss_transaction   = 0; 
    507         m_cpt_dtlb_write_transaction = 0; 
     497        m_cpt_ins_tlb_update_acc   = 0;         
     498
     499        m_cpt_data_tlb_read         = 0;           
     500        m_cpt_data_tlb_miss         = 0;           
     501        m_cpt_data_tlb_update_acc   = 0;       
     502        m_cpt_data_tlb_update_dirty = 0;   
     503
     504        m_cost_ins_tlb_miss_frz          = 0;     
     505        m_cost_data_tlb_miss_frz         = 0;     
     506        m_cost_ins_tlb_update_acc_frz    = 0;
     507        m_cost_data_tlb_update_acc_frz   = 0;
     508        m_cost_data_tlb_update_dirty_frz = 0;
     509
     510        m_cpt_itlbmiss_transaction      = 0;   
     511        m_cpt_itlb_ll_transaction       = 0; 
     512        m_cpt_itlb_sc_transaction       = 0; 
     513        m_cpt_dtlbmiss_transaction      = 0; 
     514        m_cpt_dtlb_ll_transaction       = 0; 
     515        m_cpt_dtlb_sc_transaction       = 0; 
     516        m_cpt_dtlb_ll_dirty_transaction = 0; 
     517        m_cpt_dtlb_sc_dirty_transaction = 0; 
    508518 
    509         m_cost_itlbmiss_transaction   = 0;   
    510         m_cost_itlb_write_transaction = 0; 
    511         m_cost_dtlbmiss_transaction   = 0;   
    512         m_cost_dtlb_write_transaction = 0; 
     519        m_cost_itlbmiss_transaction      = 0;   
     520        m_cost_itlb_ll_transaction       = 0; 
     521        m_cost_itlb_sc_transaction       = 0; 
     522        m_cost_dtlbmiss_transaction      = 0;   
     523        m_cost_dtlb_ll_transaction       = 0;   
     524        m_cost_dtlb_sc_transaction       = 0;   
     525        m_cost_dtlb_ll_dirty_transaction = 0;   
     526        m_cost_dtlb_sc_dirty_transaction = 0;   
     527
     528        m_cpt_cc_cleanup_ins        = 0;
     529        m_cpt_cc_cleanup_data       = 0;
     530        m_cpt_icleanup_transaction  = 0;
     531        m_cpt_dcleanup_transaction  = 0;
     532        m_cost_icleanup_transaction = 0;
     533        m_cost_dcleanup_transaction = 0;
     534
     535        m_cpt_cc_update_data = 0;               
     536        m_cpt_cc_inval_ins   = 0;               
     537        m_cpt_cc_inval_data  = 0;               
     538        m_cpt_cc_broadcast   = 0;
    513539        return;
    514540    }
     
    630656                    r_tgt_update = false;
    631657                    r_vci_tgt_fsm = TGT_REQ_DCACHE;
    632                     m_cpt_cc_inval++ ;
     658                    m_cpt_cc_inval_data++ ;
    633659                }
    634660                else if (cell == 4)                // update
     
    642668                    r_tgt_update = true;
    643669                    r_vci_tgt_fsm = TGT_UPDT_WORD;
    644                     m_cpt_cc_update++ ;
     670                    m_cpt_cc_update_data++ ;
    645671                }     
    646672                        else if (cell == 8)
     
    654680                    r_tgt_update = false;
    655681                    r_vci_tgt_fsm = TGT_REQ_ICACHE;
    656                     m_cpt_cc_inval++ ;
     682                    m_cpt_cc_inval_ins++ ;
    657683                        }
    658684            } // end if address   
     
    853879        if (r_dcache_xtn_req)
    854880        {
    855             if ( ireq.valid ) m_cost_ins_miss_frz++;
    856 
    857881            if ((int)r_dcache_type_save == (int)iss_t::XTN_PTPR) 
    858882            {
     
    889913        if ( r_tgt_icache_req )
    890914        {
    891             if ( ireq.valid ) m_cost_ins_miss_frz++;
    892915            r_icache_fsm = ICACHE_CC_INVAL;
    893916            r_icache_fsm_save = r_icache_fsm;
     
    10111034                r_icache_vaddr_req = ireq.addr;
    10121035                r_icache_fsm = ICACHE_BIS;
    1013                 m_cost_ins_miss_frz++;
     1036                m_cost_ins_tlb_miss_frz++;
    10141037            }
    10151038            else    // cached or uncached access with a correct speculative physical address
     
    10891112                r_icache_fsm = ICACHE_MISS_WAIT;
    10901113                m_cpt_ins_miss++;
    1091                 m_cost_ins_miss_frz++;
    10921114            }
    10931115            else
     
    11161138    {
    11171139        if ( ireq.valid ) m_cost_ins_tlb_miss_frz++;
    1118 
    11191140        // external cache invalidate request
    11201141        if ( r_tgt_icache_req )
     
    11661187                        r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2); 
    11671188                        r_icache_cleanup_type = TLB_CLEANUP;
     1189                        m_cpt_cc_cleanup_ins++;
    11681190                        }       
    11691191                        else        // PTE
     
    11831205                                r_icache_tlb_ll_req = true;
    11841206                                r_icache_fsm        = ICACHE_TLB1_LL_WAIT;
    1185                                 m_cpt_ins_tlb_write_et++;
     1207                                m_cpt_ins_tlb_update_acc++;
     1208                                m_cost_ins_tlb_update_acc_frz++;
    11861209                                }
    11871210                        }
     
    11981221                                r_icache_tlb_ll_req = true;
    11991222                                r_icache_fsm        = ICACHE_TLB1_LL_WAIT;
    1200                                 m_cpt_ins_tlb_write_et++;
     1223                                m_cpt_ins_tlb_update_acc++;
     1224                                m_cost_ins_tlb_update_acc_frz++;
    12011225                                }
    12021226                            }
     
    12261250                    r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2); 
    12271251                    r_icache_cleanup_type = TLB_CLEANUP;
     1252                    m_cpt_cc_cleanup_ins++;
    12281253                    r_icache_fsm = ICACHE_IDLE; 
    12291254                }
     
    12351260    case ICACHE_TLB1_LL_WAIT:
    12361261    {
     1262        if ( ireq.valid ) m_cost_ins_tlb_miss_frz++;
     1263        m_cost_ins_tlb_update_acc_frz++;           
     1264
    12371265        // external cache invalidate request
    12381266        if ( r_tgt_icache_req )
     
    12811309    case ICACHE_TLB1_SC_WAIT:
    12821310    {
     1311       if ( ireq.valid ) m_cost_ins_tlb_miss_frz++;
     1312        m_cost_ins_tlb_update_acc_frz++;
     1313
    12831314        // external cache invalidate request
    12841315        if ( r_tgt_icache_req )
     
    13411372            r_icache_cleanup_line = victim_index;
    13421373            r_icache_cleanup_type = TLB_CLEANUP;
     1374            m_cpt_cc_cleanup_ins++;
    13431375            r_icache_fsm = ICACHE_IDLE;
    13441376        }
     
    14011433                                r_icache_tlb_ll_req = true;
    14021434                                r_icache_fsm        = ICACHE_TLB2_LL_WAIT;
    1403                                 m_cpt_ins_tlb_write_et++;
     1435                                m_cpt_ins_tlb_update_acc++;
     1436                                m_cost_ins_tlb_update_acc_frz++;
    14041437                                }
    14051438                        }
     
    14161449                                r_icache_tlb_ll_req = true;
    14171450                                r_icache_fsm        = ICACHE_TLB2_LL_WAIT;
    1418                                 m_cpt_ins_tlb_write_et++;
     1451                                m_cpt_ins_tlb_update_acc++;
     1452                                m_cost_ins_tlb_update_acc_frz++;
    14191453                                }
    14201454                            }
     
    14451479                    r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2); 
    14461480                    r_icache_cleanup_type = TLB_CLEANUP;
     1481                    m_cpt_cc_cleanup_ins++;
    14471482                    r_icache_fsm = ICACHE_IDLE; 
    14481483                }
     
    14541489    case ICACHE_TLB2_LL_WAIT:
    14551490    {
     1491        if ( ireq.valid ) m_cost_ins_tlb_miss_frz++;
     1492        m_cost_ins_tlb_update_acc_frz++;
     1493
    14561494        // external cache invalidate request
    14571495        if ( r_tgt_icache_req )
     
    15001538    case ICACHE_TLB2_SC_WAIT:
    15011539    {
     1540        if ( ireq.valid ) m_cost_ins_tlb_miss_frz++;
     1541        m_cost_ins_tlb_update_acc_frz++;
     1542
    15021543        // external cache invalidate request
    15031544        if ( r_tgt_icache_req )
     
    15611602            r_icache_cleanup_line = victim_index;
    15621603            r_icache_cleanup_type = TLB_CLEANUP;
     1604            m_cpt_cc_cleanup_ins++;
    15631605            r_icache_fsm = ICACHE_IDLE;
    15641606        }
     
    15941636                        r_icache_cleanup_line = victim_index;
    15951637                        r_icache_cleanup_type = TLB_CLEANUP;
     1638                        m_cpt_cc_cleanup_ins++;
    15961639                        r_icache_way = way + ((set+1)/m_itlb_sets);
    15971640                        r_icache_set = (set+1) % m_itlb_sets;
     
    16271670        size_t set = r_icache_set;
    16281671        bool clean = false;
    1629 
    1630         m_cost_ins_cache_flush_frz++;
    16311672
    16321673        // cache flush and send cleanup to external
     
    16441685                        r_icache_cleanup_line = victim_index;
    16451686                        r_icache_cleanup_type = CACHE_CLEANUP;
     1687                        m_cpt_cc_cleanup_ins++;
    16461688                        r_icache_way = way + ((set+1)/m_icache_sets);
    16471689                        r_icache_set = (set+1) % m_icache_sets;
     
    16701712            r_icache_cleanup_type = TLB_CLEANUP;
    16711713            r_icache_cleanup_line = victim_index;
     1714            m_cpt_cc_cleanup_ins++;
    16721715            r_dcache_xtn_req = false;
    16731716            r_itlb_translation_valid = false;
     
    17081751                r_icache_cleanup_line = ipaddr >> (uint32_log2(m_icache_words) + 2);
    17091752                r_icache_cleanup_type = CACHE_CLEANUP;
     1753                m_cpt_cc_cleanup_ins++;
    17101754            }
    17111755            r_dcache_xtn_req = false;
     
    17331777            r_icache_cleanup_line = ipaddr >> (uint32_log2(m_icache_words) + 2);   
    17341778            r_icache_cleanup_type = CACHE_CLEANUP;
     1779            m_cpt_cc_cleanup_ins++;
    17351780            r_dcache_xtn_req = false;
    17361781            r_icache_fsm = ICACHE_IDLE;
     
    17701815                r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2); 
    17711816                r_icache_cleanup_type = CACHE_CLEANUP;
     1817                m_cpt_cc_cleanup_ins++;
    17721818                r_icache_fsm = ICACHE_IDLE;
    17731819                r_icache_inval_tlb_rsp = false;
    17741820                if ( r_icache_inval_rsp ) r_icache_inval_rsp = false;
    1775                 m_cost_ins_tlb_miss_frz++;
    17761821                break;
    17771822            }
     
    17831828                r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2); 
    17841829                r_icache_cleanup_type = CACHE_CLEANUP;
     1830                m_cpt_cc_cleanup_ins++;
    17851831                r_icache_fsm = ICACHE_IDLE;
    17861832                r_icache_inval_rsp = false;
     
    17941840    case ICACHE_UNC_WAIT:
    17951841    {
    1796         m_cost_ins_miss_frz++;
    17971842        // external cache invalidate request
    17981843        if ( r_tgt_icache_req )
     
    18461891            r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2);
    18471892            r_icache_cleanup_type = CACHE_CLEANUP;
     1893            m_cpt_cc_cleanup_ins++;
    18481894            r_icache_inval_tlb_rsp = false;
    18491895            if ( r_icache_inval_rsp ) r_icache_inval_rsp = false;
     
    18591905                r_icache_cleanup_line = r_icache_paddr_save.read() >> (uint32_log2(m_icache_words) + 2);
    18601906                r_icache_cleanup_type = CACHE_CLEANUP;
     1907                m_cpt_cc_cleanup_ins++;
    18611908                r_icache_inval_rsp = false;
    18621909                r_icache_fsm = ICACHE_IDLE;
     
    18711918                r_icache_cleanup_req = r_icache.update(r_icache_paddr_save.read(), buf, &victim_index);
    18721919                r_icache_cleanup_line = victim_index;         
    1873                 r_icache_cleanup_type = CACHE_CLEANUP;           
     1920                r_icache_cleanup_type = CACHE_CLEANUP;         
     1921                m_cpt_cc_cleanup_ins++;
    18741922                r_icache_fsm = ICACHE_IDLE;
    18751923            }
     
    18901938    case ICACHE_CC_INVAL: 
    18911939    {                       
    1892         if ( ireq.valid ) m_cost_ins_miss_frz++;
    18931940        m_cpt_icache_dir_read += m_icache_ways;
    18941941
    1895         // invalidate cache
     1942        /* activity counter */
     1943        if ( (( r_icache_fsm_save == ICACHE_BIS ) ||( r_icache_fsm_save == ICACHE_MISS_WAIT ) || ( r_icache_fsm_save == ICACHE_MISS_UPDT ) ) && ( ireq.valid ) )       
     1944        {
     1945            m_cost_ins_miss_frz++;
     1946        }
     1947        if( (( r_icache_fsm_save == ICACHE_TLB1_READ )   || ( r_icache_fsm_save == ICACHE_TLB2_READ )    ||
     1948             ( r_icache_fsm_save == ICACHE_TLB1_LL_WAIT )|| ( r_icache_fsm_save == ICACHE_TLB2_LL_WAIT ) ||
     1949             ( r_icache_fsm_save == ICACHE_TLB1_SC_WAIT )|| ( r_icache_fsm_save == ICACHE_TLB2_SC_WAIT ) ||
     1950             ( r_icache_fsm_save == ICACHE_TLB1_UPDT )   || ( r_icache_fsm_save == ICACHE_TLB2_UPDT ))   && (ireq.valid) )
     1951        {
     1952            m_cost_ins_tlb_miss_frz++;
     1953        }
     1954
    18961955        if( (( r_icache_fsm_save == ICACHE_MISS_WAIT ) || ( r_icache_fsm_save == ICACHE_MISS_UPDT ) ) &&
    18971956            ((r_icache_paddr_save.read() & ~((m_icache_words<<2)-1)) == (r_tgt_addr.read() & ~((m_icache_words<<2)-1))) )
     
    19211980    case ICACHE_TLB_CC_INVAL:
    19221981    {
    1923         if ( ireq.valid ) m_cost_ins_miss_frz++;     
     1982         /* activity counter */
     1983        if ( (( r_icache_fsm_save == ICACHE_BIS ) ||( r_icache_fsm_save == ICACHE_MISS_WAIT ) || ( r_icache_fsm_save == ICACHE_MISS_UPDT ) ) && ( ireq.valid ) )       
     1984        {
     1985            m_cost_ins_miss_frz++;
     1986        }   
     1987
     1988        if( (( r_icache_fsm_save == ICACHE_TLB1_READ )   || ( r_icache_fsm_save == ICACHE_TLB2_READ )    ||
     1989             ( r_icache_fsm_save == ICACHE_TLB1_LL_WAIT )|| ( r_icache_fsm_save == ICACHE_TLB2_LL_WAIT ) ||
     1990             ( r_icache_fsm_save == ICACHE_TLB1_SC_WAIT )|| ( r_icache_fsm_save == ICACHE_TLB2_SC_WAIT ) ||
     1991             ( r_icache_fsm_save == ICACHE_TLB1_UPDT )   || ( r_icache_fsm_save == ICACHE_TLB2_UPDT ))   && (ireq.valid) )
     1992        {
     1993            m_cost_ins_tlb_miss_frz++;
     1994        }
    19241995
    19251996            if ( r_icache_tlb_inval_req ) break;
     
    19882059     
    19892060        // r_tgt_addr is number of line
    1990         bool tlb_hit = icache_tlb.cccheck((r_tgt_addr.read() >> (uint32_log2(m_icache_words)+2)),way, set, &way, &set, &end);
    1991    
     2061        bool tlb_hit = icache_tlb.cccheck((r_tgt_addr.read() >> (uint32_log2(m_icache_words)+2)),way, set, &way, &set, &end);     
    19922062        if ( tlb_hit )
    19932063        {
     
    20072077    case INVAL_ITLB_INVAL:
    20082078    {
    2009         //m_cost_ins_tlb_inval_frz++;
    2010  
    20112079        icache_tlb.ccinval(r_ccinval_itlb_way, r_ccinval_itlb_set);
    20122080
     
    21282196            r_dcache_fsm = DCACHE_CC_CHECK;
    21292197            r_dcache_fsm_save = DCACHE_IDLE;
    2130             if ( dreq.valid ) m_cost_data_miss_frz++;
    21312198            break;
    21322199        }       
     
    25092576                r_dcache_hit_p_save = dcache_hit_p;
    25102577                r_dcache_fsm = DCACHE_BIS;
    2511                 m_cost_data_miss_frz++;
     2578                m_cost_data_tlb_miss_frz++;
    25122579            }
    25132580            else  // cached or uncached access with a correct speculative physical address
     
    25452612                        m_cpt_write++;
    25462613                        if ( dcache_cached ) m_cpt_write_cached++;
     2614                        m_cost_write_frz++;
    25472615
    25482616                        if ( dcache_hit_c && dcache_cached )    // cache update required
     
    25532621                        else if ( !dcache_pte_info.d && (r_mmu_mode.read() & DATA_TLB_MASK) )   // dirty bit update required
    25542622                        {
     2623                            m_cpt_data_tlb_update_dirty++;
     2624                            m_cost_data_tlb_update_dirty_frz++;                           
    25552625                            if (dcache_tlb.getpagesize(dcache_tlb_way, dcache_tlb_set))
    25562626                            {
     
    25592629                                r_dcache_tlb_ll_dirty_req = true;
    25602630                                r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    2561                                 m_cpt_data_tlb_write_dirty++;
    25622631                            }
    25632632                            else
     
    25692638                                    r_dcache_tlb_ll_dirty_req = true;
    25702639                                    r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    2571                                     m_cpt_data_tlb_write_dirty++;
    25722640                                }
    25732641                                else    // get PTBA to calculate the physical address of PTE
     
    25812649                                }
    25822650                            }
    2583                             m_cost_data_tlb_miss_frz++;
    25842651                        }
    25852652                        else                                    // no cache update, not dirty bit update
     
    26852752                else if ( !r_dcache_dirty_save && (r_mmu_mode.read() & DATA_TLB_MASK) )   // dirty bit update required
    26862753                {
     2754                    m_cpt_data_tlb_update_dirty++;
     2755                    m_cost_data_tlb_update_dirty_frz++;                     
    26872756                    if (dcache_tlb.getpagesize(r_dcache_tlb_way_save, r_dcache_tlb_set_save))
    26882757                    {
     
    26912760                        r_dcache_tlb_ll_dirty_req = true;
    26922761                        r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    2693                         m_cpt_data_tlb_write_dirty++;
    26942762                    }
    26952763                    else
     
    27012769                            r_dcache_tlb_ll_dirty_req = true;
    27022770                            r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    2703                             m_cpt_data_tlb_write_dirty++;
    27042771                        }
    27052772                        else
     
    27132780                        }
    27142781                    }
    2715                     m_cost_data_tlb_miss_frz++;
    27162782                }
    27172783                else                                    // no cache update, not dirty bit update
     
    27352801    case DCACHE_LL_DIRTY_WAIT:
    27362802    {
     2803        m_cost_data_tlb_update_dirty_frz++;
     2804
    27372805        // external cache invalidate request
    27382806        if ( r_tgt_dcache_req )   
     
    27402808            r_dcache_fsm = DCACHE_CC_CHECK;
    27412809            r_dcache_fsm_save = r_dcache_fsm;
    2742             //m_cost_data_waste_wait_frz++;
    27432810            break;
    27442811        }
     
    27842851                    r_dcache_inval_tlb_rsp = false;
    27852852                    r_dcache_fsm = DCACHE_IDLE;
    2786                     m_cost_data_tlb_miss_frz++;
    27872853                }
    27882854                    else if ( r_dcache_inval_rsp )
     
    28042870    case DCACHE_SC_DIRTY_WAIT:
    28052871    {
     2872        m_cost_data_tlb_update_dirty_frz++;
    28062873        // external cache invalidate request
    28072874        if ( r_tgt_dcache_req )   
     
    28092876            r_dcache_fsm = DCACHE_CC_CHECK;
    28102877            r_dcache_fsm_save = r_dcache_fsm;
    2811             //m_cost_data_waste_wait_frz++;
    28122878            break;
    28132879        }
     
    28392905                    if (r_dcache_tlb_sc_fail) r_dcache_tlb_sc_fail = false;
    28402906                    r_dcache_fsm = DCACHE_IDLE;
    2841                     m_cost_data_tlb_miss_frz++;
    28422907                }
    28432908                    else if ( r_dcache_inval_rsp )
     
    29022967                r_dcache_cleanup_line = r_dcache_tlb_paddr.read() >> (uint32_log2(m_dcache_words) + 2); 
    29032968                r_dcache_cleanup_type = TLB_CLEANUP;
     2969                m_cpt_cc_cleanup_data++;
    29042970                r_dcache_inval_tlb_rsp = false;
    29052971                        break;
     
    29322998                    r_dcache_tlb_ll_dirty_req = true;
    29332999                    r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    2934                     m_cpt_data_tlb_write_dirty++;
     3000                    m_cpt_data_tlb_update_dirty_frz++;
    29353001                }
    29363002                else
     
    29453011                r_dcache_cleanup_line = r_dcache_tlb_paddr.read() >> (uint32_log2(m_dcache_words) + 2); 
    29463012                r_dcache_cleanup_type = TLB_CLEANUP;
     3013                m_cpt_cc_cleanup_data++;
    29473014
    29483015                }
     
    29623029                        r_dcache_tlb_ll_acc_req = true;
    29633030                        r_dcache_fsm        = DCACHE_TLB1_LL_WAIT;
    2964                         m_cpt_ins_tlb_write_et++;
     3031                        m_cpt_data_tlb_update_acc++;
     3032                        m_cost_data_tlb_update_acc_frz++;
    29653033                        }
    29663034                }
     
    29773045                        r_dcache_tlb_ll_acc_req = true;
    29783046                        r_dcache_fsm        = DCACHE_TLB1_LL_WAIT;
    2979                         m_cpt_ins_tlb_write_et++;
     3047                        m_cpt_data_tlb_update_acc++;
     3048                        m_cost_data_tlb_update_acc_frz++;
    29803049                        }
    29813050                    }
     
    29873056    case DCACHE_TLB1_LL_WAIT:
    29883057    {
     3058        if ( dreq.valid ) m_cost_data_tlb_miss_frz++;
     3059        m_cost_data_tlb_update_acc_frz++;
     3060       
    29893061        // external cache invalidate request
    29903062        if ( r_tgt_dcache_req )   
     
    30333105                    r_dcache_inval_tlb_rsp = false;
    30343106                    r_dcache_fsm = DCACHE_IDLE;
    3035                     m_cost_data_tlb_miss_frz++;
    30363107                }
    30373108                        else
     
    30483119    case DCACHE_TLB1_SC_WAIT:
    30493120    {
     3121        if ( dreq.valid ) m_cost_data_tlb_miss_frz++;
     3122        m_cost_data_tlb_update_acc_frz++;
     3123
    30503124        // external cache invalidate request
    30513125        if ( r_tgt_dcache_req )   
     
    30813155                    if (r_dcache_tlb_sc_fail) r_dcache_tlb_sc_fail = false;
    30823156                    r_dcache_fsm = DCACHE_IDLE;
    3083                     m_cost_data_tlb_miss_frz++;
    30843157                }
    30853158                    else if ( r_dcache_tlb_sc_fail )
     
    31073180            r_dcache_fsm = DCACHE_CC_CHECK;
    31083181            r_dcache_fsm_save = r_dcache_fsm;
    3109             //m_cost_data_waste_wait_frz++;
    31103182            break;
    31113183        }
     
    31183190            r_dcache_cleanup_line = victim_index;
    31193191            r_dcache_cleanup_type = TLB_CLEANUP;
     3192            m_cpt_cc_cleanup_data++;
    31203193            r_dcache_fsm = DCACHE_IDLE;
    31213194        }
     
    31693242                r_dcache_cleanup_line = r_dcache_tlb_paddr.read() >> (uint32_log2(m_dcache_words) + 2); 
    31703243                r_dcache_cleanup_type = TLB_CLEANUP;
     3244                m_cpt_cc_cleanup_data++;
    31713245                r_dcache_inval_tlb_rsp = false;
    31723246                        break;
     
    32053279                        r_dcache_tlb_ll_acc_req = true;
    32063280                        r_dcache_fsm = DCACHE_TLB2_LL_WAIT;
    3207                         m_cpt_ins_tlb_write_et++;
     3281                        m_cpt_data_tlb_update_acc++;
     3282                        m_cost_data_tlb_update_acc_frz++;
    32083283                        }
    32093284                }
     
    32203295                        r_dcache_tlb_ll_acc_req = true;
    32213296                        r_dcache_fsm = DCACHE_TLB2_LL_WAIT;
    3222                         m_cpt_ins_tlb_write_et++;
     3297                        m_cpt_data_tlb_update_acc++;
     3298                        m_cost_data_tlb_update_acc_frz++;
    32233299                        }
    32243300                    }
     
    32303306    case DCACHE_TLB2_LL_WAIT:
    32313307    {
     3308        if ( dreq.valid ) m_cost_data_tlb_miss_frz++;
     3309        m_cost_data_tlb_update_acc_frz++;
     3310       
    32323311        // external cache invalidate request
    32333312        if ( r_tgt_dcache_req )   
     
    32763355                    r_dcache_inval_tlb_rsp = false;
    32773356                    r_dcache_fsm = DCACHE_IDLE;
    3278                     m_cost_data_tlb_miss_frz++;
    32793357                }
    32803358                        else
     
    32913369    case DCACHE_TLB2_SC_WAIT:
    32923370    {
     3371        if ( dreq.valid ) m_cost_data_tlb_miss_frz++;
     3372        m_cost_data_tlb_update_acc_frz++;
     3373       
    32933374        // external cache invalidate request
    32943375        if ( r_tgt_dcache_req )   
     
    33243405                    if (r_dcache_tlb_sc_fail) r_dcache_tlb_sc_fail = false;
    33253406                    r_dcache_fsm = DCACHE_IDLE;
    3326                     m_cost_data_tlb_miss_frz++;
    33273407                }
    33283408                    else if ( r_dcache_tlb_sc_fail )
     
    33603440            r_dcache_cleanup_line = victim_index;
    33613441            r_dcache_cleanup_type = TLB_CLEANUP;
     3442            m_cpt_cc_cleanup_data++;
    33623443            r_dcache_fsm = DCACHE_IDLE;
    33633444        }
     
    33773458        size_t set = r_dcache_set;
    33783459        bool clean = false;
    3379 
    3380         m_cost_data_tlb_flush_frz++;
    33813460
    33823461        // 4K page size TLB flush leads to cleanup req 
     
    33943473                        r_dcache_cleanup_line = victim_index;
    33953474                        r_dcache_cleanup_type = TLB_CLEANUP;
     3475                        m_cpt_cc_cleanup_data++;
    33963476                        r_dcache_way = way + ((set+1)/m_dtlb_sets);
    33973477                        r_dcache_set = (set+1) % m_dtlb_sets;
     
    34353515            r_dcache_fsm = DCACHE_CC_CHECK;
    34363516            r_dcache_fsm_save = r_dcache_fsm;
    3437             m_cost_data_waste_wait_frz++;
    34383517            break;
    34393518        } 
     
    34563535                        r_dcache_cleanup_line = victim_index;
    34573536                        r_dcache_cleanup_type = CACHE_CLEANUP;
     3537                        m_cpt_cc_cleanup_data++;
    34583538                        r_dcache_way = way + ((set+1)/m_dcache_sets);
    34593539                        r_dcache_set = (set+1) % m_dcache_sets;
     
    34823562            r_dcache_cleanup_req = dcache_tlb.inval1(r_dcache_wdata_save, &victim_index);
    34833563            r_dcache_cleanup_type = TLB_CLEANUP;
     3564            m_cpt_cc_cleanup_data++;
    34843565            r_dcache_cleanup_line = victim_index;
    34853566            r_dtlb_translation_valid = false;
     
    34983579            r_dcache_fsm = DCACHE_CC_CHECK;
    34993580            r_dcache_fsm_save = r_dcache_fsm;
    3500             m_cost_data_waste_wait_frz++;
    35013581            break;
    35023582        } 
     
    35233603                r_dcache_cleanup_req = r_dcache.inval(dpaddr);
    35243604                r_dcache_cleanup_type = CACHE_CLEANUP;
     3605                m_cpt_cc_cleanup_data++;
    35253606                r_dcache_cleanup_line = dpaddr >> (uint32_log2(m_dcache_words)+2);
    35263607            }
     
    35383619            r_dcache_fsm = DCACHE_CC_CHECK;
    35393620            r_dcache_fsm_save = r_dcache_fsm;
    3540             m_cost_data_waste_wait_frz++;
    35413621            break;
    35423622        } 
     
    35493629            r_dcache_cleanup_req = r_dcache.inval(dpaddr);
    35503630            r_dcache_cleanup_type = CACHE_CLEANUP;
     3631            m_cpt_cc_cleanup_data++;
    35513632            r_dcache_cleanup_line = dpaddr >> (uint32_log2(m_dcache_words)+2);
    35523633            r_dcache_fsm = DCACHE_IDLE;
     
    35693650    case DCACHE_MISS_WAIT:
    35703651    {
     3652        if (dreq.valid) m_cost_data_miss_frz++;
    35713653        // external cache invalidate request
    35723654        if ( r_tgt_dcache_req )
     
    35743656            r_dcache_fsm = DCACHE_CC_CHECK;
    35753657            r_dcache_fsm_save = r_dcache_fsm;
    3576             m_cost_cc_wait_frz++;
    35773658            break;
    35783659        }
     
    35963677                r_dcache_cleanup_req = true;
    35973678                r_dcache_cleanup_type = CACHE_CLEANUP;
     3679                m_cpt_cc_cleanup_data++;
    35983680                r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words) + 2); 
    35993681                r_dcache_fsm = DCACHE_IDLE;
     
    36083690                r_dcache_cleanup_req = true;
    36093691                r_dcache_cleanup_type = CACHE_CLEANUP;
     3692                m_cpt_cc_cleanup_data++;
    36103693                r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words) + 2); 
    36113694                r_dcache_fsm = DCACHE_IDLE;
     
    36213704    case DCACHE_MISS_UPDT:
    36223705    {
     3706        if (dreq.valid) m_cost_data_miss_frz++;
    36233707        // external cache invalidate request
    36243708        if ( r_tgt_dcache_req )
     
    36343718            r_dcache_cleanup_req = true;
    36353719            r_dcache_cleanup_type = CACHE_CLEANUP;           
     3720            m_cpt_cc_cleanup_data++;
    36363721            r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words) + 2); 
    36373722            r_dcache_inval_tlb_rsp = false;
     
    36473732            r_dcache_cleanup_req = true;
    36483733            r_dcache_cleanup_type = CACHE_CLEANUP;           
     3734            m_cpt_cc_cleanup_data++;
    36493735            r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words) + 2); 
    36503736            r_dcache_inval_rsp = false;
    36513737            r_dcache_fsm = DCACHE_IDLE;
    3652             m_cost_data_tlb_miss_frz++;
    36533738            break;
    36543739        }
     
    36573742        {
    36583743            paddr_t  victim_index = 0;
     3744            m_cpt_dcache_data_write++;
     3745            m_cpt_dcache_dir_write++;
    36593746            r_dcache_cleanup_req = r_dcache.update(r_dcache_paddr_save.read(), r_dcache_miss_buf, &victim_index);
    36603747            r_dcache_cleanup_line = victim_index;
    36613748            r_dcache_cleanup_type = CACHE_CLEANUP;
     3749            m_cpt_cc_cleanup_data++;
    36623750            r_dcache_fsm = DCACHE_IDLE;
    36633751        }
     
    36673755    case DCACHE_UNC_WAIT:
    36683756    {
     3757        if ( dreq.valid ) m_cost_unc_read_frz++;
    36693758        // external cache invalidate request
    36703759        if ( r_tgt_dcache_req )
     
    36973786                        r_dcache_cleanup_req = r_dcache.inval(r_dcache_paddr_save);
    36983787                r_dcache_cleanup_type = CACHE_CLEANUP;
     3788                m_cpt_cc_cleanup_data++;
    36993789                        r_dcache_cleanup_line = r_dcache_paddr_save.read() >> (uint32_log2(m_dcache_words)+2);
    37003790            }           
     
    37083798    case DCACHE_WRITE_UPDT:
    37093799    {
     3800        m_cpt_dcache_data_write++;
    37103801        bool write_hit = false;
    37113802        data_t mask = vci_param::be2mask(r_dcache_be_save.read());
     
    37163807        if ( !r_dcache_dirty_save && (r_mmu_mode.read() & DATA_TLB_MASK) )   
    37173808        {
     3809            m_cpt_data_tlb_update_dirty++;
     3810            m_cost_data_tlb_update_dirty_frz++;               
    37183811            if ( dcache_tlb.getpagesize(r_dcache_tlb_way_save, r_dcache_tlb_set_save) ) // 2M page size, one level page table
    37193812            {
     
    37223815                r_dcache_tlb_ll_dirty_req = true;
    37233816                r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    3724                 m_cpt_data_tlb_write_dirty++;
    37253817            }
    37263818            else
     
    37323824                    r_dcache_tlb_ll_dirty_req = true;
    37333825                    r_dcache_fsm = DCACHE_LL_DIRTY_WAIT;
    3734                     m_cpt_data_tlb_write_dirty++;
    37353826                }
    37363827                else
     
    37563847    case DCACHE_WRITE_DIRTY:
    37573848    {
    3758         m_cost_data_tlb_miss_frz++;
     3849        m_cost_data_tlb_update_dirty_frz++;
    37593850
    37603851        // external cache invalidate request
     
    37633854            r_dcache_fsm = DCACHE_CC_CHECK;
    37643855            r_dcache_fsm_save = r_dcache_fsm;
    3765             //m_cost_data_waste_wait_frz++;
    37663856            break;
    37673857        }
     
    37953885        m_cpt_dcache_data_read += m_dcache_ways;
    37963886
    3797         m_cost_cc_wait_frz++;
     3887        /* activity counter */
     3888        if ( (( r_dcache_fsm_save == DCACHE_BIS ) ||( r_dcache_fsm_save == DCACHE_MISS_WAIT ) || ( r_dcache_fsm_save == DCACHE_MISS_UPDT ) ) && ( dreq.valid ) )       
     3889        {
     3890            m_cost_data_miss_frz++;
     3891        }
     3892        if( (( r_dcache_fsm_save == DCACHE_TLB1_READ )   || ( r_dcache_fsm_save == DCACHE_TLB2_READ )    ||
     3893             ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT ) ||
     3894             ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT ) ||
     3895             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )   || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT ))   && (dreq.valid) )
     3896        {
     3897            m_cost_data_tlb_miss_frz++;
     3898        }
    37983899
    37993900        if(( /*( r_dcache_fsm_save == DCACHE_UNC_WAIT ) ||*/
     
    38413942    case DCACHE_CC_UPDT:    // update directory and data cache       
    38423943    {
     3944        /* activity counter */
     3945        if ( (( r_dcache_fsm_save == DCACHE_BIS ) ||( r_dcache_fsm_save == DCACHE_MISS_WAIT ) || ( r_dcache_fsm_save == DCACHE_MISS_UPDT ) ) && ( dreq.valid ) )       
     3946        {
     3947            m_cost_data_miss_frz++;
     3948        }
     3949        if( (( r_dcache_fsm_save == DCACHE_TLB1_READ )   || ( r_dcache_fsm_save == DCACHE_TLB2_READ )    ||
     3950             ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT ) ||
     3951             ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT ) ||
     3952             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )   || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT ))   && (dreq.valid) )
     3953        {
     3954            m_cost_data_tlb_miss_frz++;
     3955        }
     3956
    38433957        m_cpt_dcache_dir_write++;
    38443958        m_cpt_dcache_data_write++;
    3845         m_cost_cc_wait_frz++;
    38463959
    38473960        data_t* buf = r_tgt_buf;
     
    38583971    case DCACHE_CC_INVAL:   // invalidate a cache line
    38593972    {
    3860         m_cost_cc_wait_frz++;
     3973        /* activity counter */
     3974        if ( (( r_dcache_fsm_save == DCACHE_BIS ) ||( r_dcache_fsm_save == DCACHE_MISS_WAIT ) || ( r_dcache_fsm_save == DCACHE_MISS_UPDT ) ) && ( dreq.valid ) )       
     3975        {
     3976            m_cost_data_miss_frz++;
     3977        }
     3978        if( (( r_dcache_fsm_save == DCACHE_TLB1_READ )   || ( r_dcache_fsm_save == DCACHE_TLB2_READ )    ||
     3979             ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT ) ||
     3980             ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT ) ||
     3981             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )   || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT ))   && (dreq.valid) )
     3982        {
     3983            m_cost_data_tlb_miss_frz++;
     3984        }
     3985
    38613986        r_tgt_dcache_rsp = r_dcache.inval(r_tgt_addr.read());
    38623987        if ( r_tgt_broadcast )
     
    38754000    case DCACHE_CC_NOP:     // no external hit
    38764001    {
    3877         m_cost_cc_wait_frz++;
     4002        /* activity counter */
     4003        if ( (( r_dcache_fsm_save == DCACHE_BIS ) ||( r_dcache_fsm_save == DCACHE_MISS_WAIT ) || ( r_dcache_fsm_save == DCACHE_MISS_UPDT ) ) && ( dreq.valid ) )       
     4004        {
     4005            m_cost_data_miss_frz++;
     4006        }
     4007        if( (( r_dcache_fsm_save == DCACHE_TLB1_READ )   || ( r_dcache_fsm_save == DCACHE_TLB2_READ )    ||
     4008             ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT ) ||
     4009             ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT ) ||
     4010             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )   || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT ))   && (dreq.valid) )
     4011        {
     4012            m_cost_data_tlb_miss_frz++;
     4013        }
     4014
    38784015        r_tgt_dcache_rsp = r_tgt_update;
    38794016        if ( r_tgt_broadcast )
     
    38924029    case DCACHE_TLB_CC_INVAL:
    38934030    {
     4031        /* activity counter */
     4032        if ( (( r_dcache_fsm_save == DCACHE_BIS ) ||( r_dcache_fsm_save == DCACHE_MISS_WAIT ) || ( r_dcache_fsm_save == DCACHE_MISS_UPDT ) ) && ( dreq.valid ) )       
     4033        {
     4034            m_cost_data_miss_frz++;
     4035        }
     4036        if( (( r_dcache_fsm_save == DCACHE_TLB1_READ )   || ( r_dcache_fsm_save == DCACHE_TLB2_READ )    ||
     4037             ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT ) ||
     4038             ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )|| ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT ) ||
     4039             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )   || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT ))   && (dreq.valid) )
     4040        {
     4041            m_cost_data_tlb_miss_frz++;
     4042        }
     4043
    38944044        paddr_t dcache_tlb_nline = 0;
    3895         if ( dreq.valid ) m_cost_data_tlb_miss_frz++;       
    38964045
    38974046            if ( r_dcache_tlb_inval_req ) break;
     
    40524201        {
    40534202            r_vci_cmd_fsm = CMD_INS_CLEANUP;
     4203            m_cpt_icleanup_transaction++;
    40544204        }
    40554205        else if (r_dcache_cleanup_req)
    40564206        {
    40574207            r_vci_cmd_fsm = CMD_DATA_CLEANUP;
     4208            m_cpt_dcleanup_transaction++;
    40584209        }       
    40594210        else if (r_icache_tlb_read_req)           
     
    40654216        { 
    40664217            r_vci_cmd_fsm = CMD_ITLB_ACC_LL;
    4067             //m_cpt_itlb_write_transaction++;
     4218            m_cpt_itlb_ll_transaction++;
    40684219        }
    40694220        else if (r_icache_tlb_sc_req)     
    40704221        { 
    40714222            r_vci_cmd_fsm = CMD_ITLB_ACC_SC;
    4072             //m_cpt_itlb_write_transaction++;
     4223            m_cpt_itlb_sc_transaction++;
    40734224        }
    40744225        else if (r_icache_miss_req)
     
    40804231        {   
    40814232            r_vci_cmd_fsm = CMD_INS_UNC;
    4082             m_cpt_imiss_transaction++;
     4233            m_cpt_icache_unc_transaction++;
    40834234        } 
    40844235        else if (r_dcache_tlb_read_req)
     
    40904241        { 
    40914242            r_vci_cmd_fsm = CMD_DTLB_ACC_LL;
    4092             m_cpt_dtlb_write_transaction++;
     4243            m_cpt_dtlb_ll_transaction++;
    40934244        }
    40944245        else if (r_dcache_tlb_sc_acc_req)
    40954246        { 
    40964247            r_vci_cmd_fsm = CMD_DTLB_ACC_SC;
    4097             m_cpt_dtlb_write_transaction++;
     4248            m_cpt_dtlb_sc_transaction++;
    40984249        }
    40994250        else if (r_dcache_tlb_ll_dirty_req)
    41004251        { 
    41014252            r_vci_cmd_fsm = CMD_DTLB_DIRTY_LL;
    4102             m_cpt_dtlb_write_transaction++;
     4253            m_cpt_dtlb_ll_dirty_transaction++;
    41034254        }
    41044255        else if (r_dcache_tlb_sc_dirty_req)
    41054256        { 
    41064257            r_vci_cmd_fsm = CMD_DTLB_DIRTY_SC;
    4107             m_cpt_dtlb_write_transaction++;
     4258            m_cpt_dtlb_sc_dirty_transaction++;
    41084259        }
    41094260        else if (r_dcache_write_req)
     
    42494400                    "illegal VCI response packet for data read uncached");
    42504401            }
    4251 /*
    42524402            else
    42534403            {
     
    42554405                       "The VCI response packet for instruction miss is too short");
    42564406            }
    4257 */
     4407
    42584408            r_icache_tlb_read_req = false;
    42594409            r_icache_tlb_first_req = false;
     
    42674417
    42684418    case RSP_ITLB_ACC_LL:
     4419        m_cost_itlb_ll_transaction++;
    42694420        if ( ! p_vci_ini_rw.rspval.read() )
    42704421            break;
     
    42864437
    42874438    case RSP_ITLB_ACC_SC:
     4439        m_cost_itlb_sc_transaction++;
    42884440        if ( ! p_vci_ini_rw.rspval.read() )
    42894441            break;
     
    43284480
    43294481    case RSP_INS_UNC:
    4330         m_cost_imiss_transaction++;
     4482        m_cost_icache_unc_transaction++;
    43314483        if ( ! p_vci_ini_rw.rspval.read() )
    43324484            break;
     
    43604512                    "illegal VCI response packet for data read uncached");
    43614513            }
    4362 /*
    43634514            else
    43644515            {
     
    43664517                       "The VCI response packet for instruction miss is too short");
    43674518            }
    4368 */
     4519
    43694520            r_dcache_tlb_read_req = false;
    43704521            r_dcache_tlb_first_req = false;
     
    43784529
    43794530    case RSP_DTLB_ACC_LL:
     4531        m_cost_dtlb_ll_transaction++;
    43804532        if ( ! p_vci_ini_rw.rspval.read() )
    43814533            break;
     
    43974549
    43984550    case RSP_DTLB_ACC_SC:
     4551        m_cost_dtlb_sc_transaction++;
    43994552        if ( ! p_vci_ini_rw.rspval.read() )
    44004553            break;
     
    44164569
    44174570    case RSP_DTLB_DIRTY_LL:
     4571        m_cost_dtlb_ll_dirty_transaction++;
    44184572        if ( ! p_vci_ini_rw.rspval.read() )
    44194573            break;
     
    44354589
    44364590    case RSP_DTLB_DIRTY_SC:
     4591        m_cost_dtlb_sc_dirty_transaction++;
    44374592        if ( ! p_vci_ini_rw.rspval.read() )
    44384593            break;
     
    45154670    case RSP_INS_CLEANUP:
    45164671    case RSP_DATA_CLEANUP:
     4672        if ( r_vci_rsp_fsm == RSP_INS_CLEANUP )
     4673        {
     4674            m_cost_icleanup_transaction++;
     4675        }
     4676        else
     4677        {                                   
     4678            m_cost_dcleanup_transaction++;
     4679        }
     4680
    45174681        if ( ! p_vci_ini_c.rspval.read() )
    45184682            break;
Note: See TracChangeset for help on using the changeset viewer.