Changeset 198 for trunk/modules


Ignore:
Timestamp:
Feb 20, 2012, 7:25:35 PM (12 years ago)
Author:
almaless
Message:

Undoing change committed in r197

File:
1 edited

Legend:

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

    r197 r198  
    3434#define DEBUG_INVAL_ITLB        1
    3535#define DEBUG_INVAL_DTLB        1
    36 
    37 #define _CMD_INIT_VAL       0x00
    38 #define _CMD_ITLB           0x01
    39 #define _CMD_DTLB           0x02   
    40 #define _CMD_USR            0x04
    4136
    4237namespace soclib {
     
    398393             "icache_words and dcache_words parameters must be equal");
    399394
    400     {
    401         uint32_t val;
    402 
    403         val  = (uint32_log2(m_dtlb_ways)   << 29)   | (uint32_log2(m_dtlb_sets)   << 25) |
    404                (uint32_log2(m_dcache_ways) << 22)   | (uint32_log2(m_dcache_sets) << 18) |
    405                (uint32_log2(m_itlb_ways)   << 15)   | (uint32_log2(m_itlb_sets)   << 11) |
    406                (uint32_log2(m_icache_ways) << 8)    | (uint32_log2(m_icache_sets) << 4)  |
    407                (uint32_log2(m_icache_words<<2));
    408 
    409         //r_mmu_params = val;
    410         m_mmu_params = val;
    411    
    412         val = (1 << 16) | 0x1;
    413         //r_mmu_release = val;
    414         m_mmu_release = val;
    415     }
    416 
     395    r_mmu_params = (uint32_log2(m_dtlb_ways)   << 29)   | (uint32_log2(m_dtlb_sets)   << 25) |
     396                   (uint32_log2(m_dcache_ways) << 22)   | (uint32_log2(m_dcache_sets) << 18) |
     397                   (uint32_log2(m_itlb_ways)   << 15)   | (uint32_log2(m_itlb_sets)   << 11) |
     398                   (uint32_log2(m_icache_ways) << 8)    | (uint32_log2(m_icache_sets) << 4)  |
     399                   (uint32_log2(m_icache_words<<2));
     400
     401    r_mmu_release = (uint32_t)(1 << 16) | 0x1;
    417402
    418403    r_tgt_buf         = new uint32_t[dcache_words];
     
    420405    r_dcache_in_itlb  = new bool[dcache_ways*dcache_sets];           
    421406    r_dcache_in_dtlb  = new bool[dcache_ways*dcache_sets];         
    422 
    423 
    424     m_proc_id = proc_id;
    425 
    426     m_tm_start = 0;
    427     m_tm_end = 0;
    428     m_period = 0;
    429    
    430     char *ptr;
    431    
    432     ptr = getenv("TSAR_L1_TM_START");
    433    
    434     if(ptr != NULL)
    435         m_tm_start = (size_t) atol(ptr);
    436    
    437     ptr = getenv("TSAR_L1_TM_END");
    438    
    439     if(ptr != NULL)
    440         m_tm_end = (size_t) atol(ptr);
    441    
    442     ptr = getenv("TSAR_L1_PERIOD");
    443    
    444     if(ptr != NULL)
    445         m_period = (size_t) atol(ptr);
    446    
    447     if(m_period != 0)
    448         m_log.open(name, std::ios::out);
    449    
    450     if(m_proc_id == 0)
    451     {
    452         std::cout << "TSAR_L1_TM_START =" << m_tm_start << std::endl
    453                   << "TSAR_L1_TM_END   =" << m_tm_end << std::endl
    454                   << "TSAR_L1_PERIOD   =" << m_period << std::endl;
    455     }
    456 
    457407
    458408    SC_METHOD(transition);
     
    585535
    586536
     537
     538/*
    587539////////////////////////
    588540tmpl(void)::print_stats()
    589541////////////////////////
    590542{
    591     std::ostream  &output = (m_period == 0) ? std::cout : m_log;
    592 
    593543    float run_cycles = (float)(m_cpt_total_cycles - m_cpt_frz_cycles);
    594     output << name() << std::endl
    595               << "CPI                     = " << (float)m_cpt_total_cycles/run_cycles << std::endl
    596               << "READ_RATE               = " << (float)m_cpt_data_read/run_cycles << std::endl
    597               << "WRITE_RATE              = " << (float)m_cpt_data_write/run_cycles << std::endl
    598               << "IMISS_RATE              = " << (float)m_cpt_ins_miss/m_cpt_ins_read << std::endl
    599               << "DMISS_RATE              = " << (float)m_cpt_data_miss/(m_cpt_data_read-m_cpt_unc_read) << std::endl 
    600               << "INS_MISS_COST           = " << (float)m_cost_ins_miss_frz/m_cpt_ins_miss << std::endl     
    601               << "DATA_MISS_COST          = " << (float)m_cost_data_miss_frz/m_cpt_data_miss << std::endl
    602               << "WRITE_COST              = " << (float)m_cost_write_frz/m_cpt_data_write << std::endl       
    603               << "UNC_COST                = " << (float)m_cost_unc_read_frz/m_cpt_unc_read << std::endl
    604               << "UNCACHED_READ_RATE      = " << (float)m_cpt_unc_read/m_cpt_data_read << std::endl
    605               << "CACHED_WRITE_RATE       = " << (float)m_cpt_write_cached/m_cpt_data_write << std::endl
    606               << "INS_TLB_MISS_RATE       = " << (float)m_cpt_ins_tlb_miss/m_cpt_ins_tlb_read << std::endl
    607               << "DATA_TLB_MISS_RATE      = " << (float)m_cpt_data_tlb_miss/m_cpt_data_tlb_read << std::endl
    608               << "ITLB_MISS_COST          = " << (float)m_cost_ins_tlb_miss_frz/m_cpt_ins_tlb_miss << std::endl
    609               << "DTLB_MISS_COST          = " << (float)m_cost_data_tlb_miss_frz/m_cpt_data_tlb_miss << std::endl   
    610               << "ITLB_UPDATE_ACC_COST    = " << (float)m_cost_ins_tlb_update_acc_frz/m_cpt_ins_tlb_update_acc << std::endl
    611               << "DTLB_UPDATE_ACC_COST    = " << (float)m_cost_data_tlb_update_acc_frz/m_cpt_data_tlb_update_acc << std::endl
    612               << "DTLB_UPDATE_DIRTY_COST = " << (float)m_cost_data_tlb_update_dirty_frz/m_cpt_data_tlb_update_dirty << std::endl
    613               << "ITLB_HIT_IN_DCACHE_RATE = " << (float)m_cpt_ins_tlb_hit_dcache/m_cpt_ins_tlb_miss << std::endl
    614               << "DTLB_HIT_IN_DCACHE_RATE = " << (float)m_cpt_data_tlb_hit_dcache/m_cpt_data_tlb_miss << std::endl
    615               << "DCACHE FROZEN BY ITLB   = " << (float)m_cost_ins_tlb_occup_cache_frz/m_cpt_dcache_frz_cycles << std::endl
    616               << "DCACHE_FOR_TLB_%        = " << (float)m_cpt_tlb_occup_dcache/(m_dcache_ways*m_dcache_sets) << std::endl
    617               << "NB_CC_BROADCAST         = " << m_cpt_cc_broadcast << std::endl
    618               << "NB_CC_UPDATE_DATA       = " << m_cpt_cc_update_dcache << std::endl
    619               << "NB_CC_INVAL_DATA        = " << m_cpt_cc_inval_dcache << std::endl
    620               << "NB_CC_INVAL_INS         = " << m_cpt_cc_inval_icache << std::endl
    621               << "NB_CC_CLEANUP_DATA      = " << m_cpt_cc_cleanup_data << std::endl
    622               << "NB_CC_CLEANUP_INS       = " << m_cpt_cc_cleanup_ins << std::endl
    623               << "CC BROADCAST COST       = " << (float)m_cost_broadcast_frz/m_cpt_cc_broadcast << std::endl
    624               << "CC UPDATE DATA COST     = " << (float)m_cost_updt_data_frz/m_cpt_cc_update_dcache << std::endl
    625               << "CC INVAL DATA COST      = " << (float)m_cost_inval_data_frz/m_cpt_cc_inval_dcache << std::endl
    626               << "CC INVAL INS COST       = " << (float)m_cost_inval_ins_frz/m_cpt_cc_inval_icache << std::endl
    627               << "IMISS_TRANSACTION       = " << (float)m_cost_imiss_transaction/m_cpt_imiss_transaction << std::endl
    628               << "DMISS_TRANSACTION       = " << (float)m_cost_dmiss_transaction/m_cpt_dmiss_transaction << std::endl
    629               << "UNC_TRANSACTION         = " << (float)m_cost_unc_transaction/m_cpt_unc_transaction << std::endl
    630               << "WRITE_TRANSACTION       = " << (float)m_cost_write_transaction/m_cpt_write_transaction << std::endl
    631               << "WRITE_LENGTH            = " << (float)m_length_write_transaction/m_cpt_write_transaction << std::endl
    632               << "ITLB_MISS_TRANSACTION   = " << (float)m_cost_itlbmiss_transaction/m_cpt_itlbmiss_transaction << std::endl
    633               << "DTLB_MISS_TRANSACTION   = " << (float)m_cost_dtlbmiss_transaction/m_cpt_dtlbmiss_transaction << std::endl;
     544    std::cout << name() << std::endl
     545        << "- CPI                    = " << (float)m_cpt_total_cycles/run_cycles << std::endl
     546        << "- READ RATE              = " << (float)m_cpt_read/run_cycles << std::endl
     547        << "- WRITE RATE             = " << (float)m_cpt_write/run_cycles << std::endl
     548        << "- IMISS_RATE             = " << (float)m_cpt_ins_miss/m_cpt_ins_read << std::endl
     549        << "- DMISS RATE             = " << (float)m_cpt_data_miss/(m_cpt_read-m_cpt_unc_read) << std::endl 
     550        << "- INS MISS COST          = " << (float)m_cost_ins_miss_frz/m_cpt_ins_miss << std::endl     
     551        << "- DATA MISS COST         = " << (float)m_cost_data_miss_frz/m_cpt_data_miss << std::endl
     552        << "- WRITE COST             = " << (float)m_cost_write_frz/m_cpt_write << std::endl       
     553        << "- UNC COST               = " << (float)m_cost_unc_read_frz/m_cpt_unc_read << std::endl
     554        << "- UNCACHED READ RATE     = " << (float)m_cpt_unc_read/m_cpt_read << std::endl
     555        << "- CACHED WRITE RATE      = " << (float)m_cpt_write_cached/m_cpt_write << std::endl
     556        << "- INS TLB MISS RATE      = " << (float)m_cpt_ins_tlb_miss/m_cpt_ins_tlb_read << std::endl
     557        << "- DATA TLB MISS RATE     = " << (float)m_cpt_data_tlb_miss/m_cpt_data_tlb_read << std::endl
     558        << "- ITLB MISS COST         = " << (float)m_cost_ins_tlb_miss_frz/m_cpt_ins_tlb_miss << std::endl
     559        << "- DTLB MISS COST         = " << (float)m_cost_data_tlb_miss_frz/m_cpt_data_tlb_miss << std::endl   
     560        << "- ITLB UPDATE ACC COST   = " << (float)m_cost_ins_tlb_update_acc_frz/m_cpt_ins_tlb_update_acc << std::endl
     561        << "- DTLB UPDATE ACC COST   = " << (float)m_cost_data_tlb_update_acc_frz/m_cpt_data_tlb_update_acc << std::endl
     562        << "- DTLB UPDATE DIRTY COST = " << (float)m_cost_data_tlb_update_dirty_frz/m_cpt_data_tlb_update_dirty << std::endl
     563        << "- ITLB HIT IN DCACHE RATE= " << (float)m_cpt_ins_tlb_hit_dcache/m_cpt_ins_tlb_miss << std::endl
     564        << "- DTLB HIT IN DCACHE RATE= " << (float)m_cpt_data_tlb_hit_dcache/m_cpt_data_tlb_miss << std::endl
     565        << "- DCACHE FROZEN BY ITLB  = " << (float)m_cost_ins_tlb_occup_cache_frz/m_cpt_dcache_frz_cycles << std::endl
     566        << "- DCACHE FOR TLB %       = " << (float)m_cpt_tlb_occup_dcache/(m_dcache_ways*m_dcache_sets) << std::endl
     567        << "- NB CC BROADCAST        = " << m_cpt_cc_broadcast << std::endl
     568        << "- NB CC UPDATE DATA      = " << m_cpt_cc_update_data << std::endl
     569        << "- NB CC INVAL DATA       = " << m_cpt_cc_inval_data << std::endl
     570        << "- NB CC INVAL INS        = " << m_cpt_cc_inval_ins << std::endl
     571        << "- CC BROADCAST COST      = " << (float)m_cost_broadcast_frz/m_cpt_cc_broadcast << std::endl
     572        << "- CC UPDATE DATA COST    = " << (float)m_cost_updt_data_frz/m_cpt_cc_update_data << std::endl
     573        << "- CC INVAL DATA COST     = " << (float)m_cost_inval_data_frz/m_cpt_cc_inval_data << std::endl
     574        << "- CC INVAL INS COST      = " << (float)m_cost_inval_ins_frz/m_cpt_cc_inval_ins << std::endl
     575        << "- NB CC CLEANUP DATA     = " << m_cpt_cc_cleanup_data << std::endl
     576        << "- NB CC CLEANUP INS      = " << m_cpt_cc_cleanup_ins << std::endl
     577        << "- IMISS TRANSACTION      = " << (float)m_cost_imiss_transaction/m_cpt_imiss_transaction << std::endl
     578        << "- DMISS TRANSACTION      = " << (float)m_cost_dmiss_transaction/m_cpt_dmiss_transaction << std::endl
     579        << "- UNC TRANSACTION        = " << (float)m_cost_unc_transaction/m_cpt_unc_transaction << std::endl
     580        << "- WRITE TRANSACTION      = " << (float)m_cost_write_transaction/m_cpt_write_transaction << std::endl
     581        << "- WRITE LENGTH           = " << (float)m_length_write_transaction/m_cpt_write_transaction << std::endl
     582        << "- ITLB MISS TRANSACTION  = " << (float)m_cost_itlbmiss_transaction/m_cpt_itlbmiss_transaction << std::endl
     583        << "- DTLB MISS TRANSACTION  = " << (float)m_cost_dtlbmiss_transaction/m_cpt_dtlbmiss_transaction << std::endl;
    634584}
    635 
    636585
    637586////////////////////////
     
    652601    m_cpt_total_cycles      = 0;
    653602   
    654     m_cpt_data_read         = 0;
    655     m_cpt_data_write        = 0;
     603    m_cpt_read         = 0;
     604    m_cpt_write        = 0;
    656605    m_cpt_data_miss    = 0;
    657606    m_cpt_ins_miss     = 0;
     
    681630    m_cpt_ins_tlb_miss       = 0;             
    682631    m_cpt_ins_tlb_update_acc = 0;         
    683     m_cpt_ins_tlb_occup_cache   = 0;
    684     m_cpt_ins_tlb_hit_dcache    = 0;
    685 
     632   
    686633    m_cpt_data_tlb_read         = 0;           
    687634    m_cpt_data_tlb_miss         = 0;           
    688635    m_cpt_data_tlb_update_acc   = 0;       
    689636    m_cpt_data_tlb_update_dirty = 0;   
     637    m_cpt_ins_tlb_hit_dcache    = 0;
    690638    m_cpt_data_tlb_hit_dcache   = 0;
     639    m_cpt_ins_tlb_occup_cache   = 0;
    691640    m_cpt_data_tlb_occup_cache  = 0;
    692641   
     
    717666    m_cost_dtlb_sc_dirty_transaction = 0;
    718667
    719     m_cpt_cc_update_icache = 0;
    720     m_cpt_cc_update_dcache = 0;
    721     m_cpt_cc_inval_icache  = 0;
    722     m_cpt_cc_inval_dcache  = 0;
    723     m_cpt_cc_broadcast     = 0;
     668    m_cpt_cc_update_data = 0;
     669    m_cpt_cc_inval_ins   = 0;
     670    m_cpt_cc_inval_data  = 0;
     671    m_cpt_cc_broadcast   = 0;
    724672
    725673    m_cost_updt_data_frz  = 0;
     
    730678    m_cpt_cc_cleanup_data = 0;
    731679    m_cpt_cc_cleanup_ins  = 0;
    732    
    733     m_cpt_icleanup_transaction  = 0;
    734     m_cpt_dcleanup_transaction  = 0;
    735     m_cost_icleanup_transaction = 0;
    736     m_cost_dcleanup_transaction = 0;
    737 
    738     m_cpt_ins_tlb_inval      = 0;
    739     m_cost_data_tlb_inval_frz = 0;
    740     m_cost_ins_tlb_inval_frz  = 0;
    741680}
    742681
     682*/
    743683
    744684/////////////////////////
     
    776716        r_mmu_mode = 0x3;
    777717
    778         // No request from ICACHE FSM to CMD FSM
     718        // No request from ICACHE FSM to CMD FSM
    779719        r_icache_miss_req          = false;
    780720        r_icache_unc_req           = false;
     
    799739
    800740        // No LL reservation
    801         r_dcache_ll_valid          = false;
     741        r_dcache_ll_valid          = false;
    802742
    803743        // No request from DCACHE FSM to INVAL TLB FSMs
     
    831771        m_debug_inval_dtlb_fsm    = false;
    832772
    833         clear_stats();
    834 
    835         /*
     773/*
     774        // activity counters
     775        m_cpt_dcache_data_read  = 0;
     776        m_cpt_dcache_data_write = 0;
     777        m_cpt_dcache_dir_read   = 0;
     778        m_cpt_dcache_dir_write  = 0;
     779        m_cpt_icache_data_read  = 0;
     780        m_cpt_icache_data_write = 0;
     781        m_cpt_icache_dir_read   = 0;
     782        m_cpt_icache_dir_write  = 0;
     783
     784        m_cpt_frz_cycles        = 0;
     785        m_cpt_dcache_frz_cycles = 0;
     786        m_cpt_total_cycles      = 0;
     787
     788        m_cpt_read              = 0;
     789        m_cpt_write             = 0;
     790        m_cpt_data_miss         = 0;
     791        m_cpt_ins_miss          = 0;
     792        m_cpt_unc_read          = 0;
     793        m_cpt_write_cached      = 0;
     794        m_cpt_ins_read          = 0;
     795
     796        m_cost_write_frz        = 0;
     797        m_cost_data_miss_frz    = 0;
     798        m_cost_unc_read_frz     = 0;
     799        m_cost_ins_miss_frz     = 0;
     800
     801        m_cpt_imiss_transaction = 0;
     802        m_cpt_dmiss_transaction = 0;
     803        m_cpt_unc_transaction   = 0;
     804        m_cpt_write_transaction = 0;
     805        m_cpt_icache_unc_transaction = 0;       
     806
     807        m_cost_imiss_transaction      = 0;
     808        m_cost_dmiss_transaction      = 0;
     809        m_cost_unc_transaction        = 0;
     810        m_cost_write_transaction      = 0;
     811        m_cost_icache_unc_transaction = 0;
     812        m_length_write_transaction    = 0;
     813
     814        m_cpt_ins_tlb_read       = 0;             
     815        m_cpt_ins_tlb_miss       = 0;             
     816        m_cpt_ins_tlb_update_acc = 0;         
     817
     818        m_cpt_data_tlb_read         = 0;           
     819        m_cpt_data_tlb_miss         = 0;           
     820        m_cpt_data_tlb_update_acc   = 0;       
     821        m_cpt_data_tlb_update_dirty = 0;   
     822        m_cpt_ins_tlb_hit_dcache    = 0;
     823        m_cpt_data_tlb_hit_dcache   = 0;
     824        m_cpt_ins_tlb_occup_cache   = 0;
     825        m_cpt_data_tlb_occup_cache  = 0;
     826
     827        m_cost_ins_tlb_miss_frz          = 0;     
     828        m_cost_data_tlb_miss_frz         = 0;     
     829        m_cost_ins_tlb_update_acc_frz    = 0;
     830        m_cost_data_tlb_update_acc_frz   = 0;
     831        m_cost_data_tlb_update_dirty_frz = 0;
     832        m_cost_ins_tlb_occup_cache_frz   = 0;
     833        m_cost_data_tlb_occup_cache_frz  = 0;
     834
     835        m_cpt_ins_tlb_inval       = 0;           
     836        m_cpt_data_tlb_inval      = 0;         
     837        m_cost_ins_tlb_inval_frz  = 0;     
     838        m_cost_data_tlb_inval_frz = 0;         
     839
     840        m_cpt_cc_update_data = 0;
     841        m_cpt_cc_inval_ins   = 0;
     842        m_cpt_cc_inval_data  = 0;
     843        m_cpt_cc_broadcast   = 0;
     844
     845        m_cost_updt_data_frz  = 0;
     846        m_cost_inval_ins_frz  = 0;
     847        m_cost_inval_data_frz = 0;
     848        m_cost_broadcast_frz  = 0;
     849
     850        m_cpt_cc_cleanup_data = 0;
     851        m_cpt_cc_cleanup_ins  = 0;
     852
     853        m_cpt_itlbmiss_transaction      = 0;   
     854        m_cpt_itlb_ll_transaction       = 0; 
     855        m_cpt_itlb_sc_transaction       = 0; 
     856        m_cpt_dtlbmiss_transaction      = 0; 
     857        m_cpt_dtlb_ll_transaction       = 0; 
     858        m_cpt_dtlb_sc_transaction       = 0; 
     859        m_cpt_dtlb_ll_dirty_transaction = 0; 
     860        m_cpt_dtlb_sc_dirty_transaction = 0; 
     861 
     862        m_cost_itlbmiss_transaction      = 0;   
     863        m_cost_itlb_ll_transaction       = 0; 
     864        m_cost_itlb_sc_transaction       = 0; 
     865        m_cost_dtlbmiss_transaction      = 0;   
     866        m_cost_dtlb_ll_transaction       = 0;   
     867        m_cost_dtlb_sc_transaction       = 0;   
     868        m_cost_dtlb_ll_dirty_transaction = 0;   
     869        m_cost_dtlb_sc_dirty_transaction = 0;   
     870
    836871        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_icache      [i]   = 0;
    837872        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_dcache      [i]   = 0;
     
    841876        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_cmd_cleanup [i]   = 0;
    842877        for (uint32_t i=0; i<32 ; ++i) m_cpt_fsm_rsp_cleanup [i]   = 0;
    843         */
    844 
    845         //// For instrumentation only
    846         r_ireq_isUser_save = false;
    847         r_dreq_isUser_save = false;
    848         r_tlb_access_type_save  = _CMD_INIT_VAL;
     878
     879*/
    849880        return;
    850881    }
     
    869900
    870901    m_cpt_total_cycles++;
    871 
    872    
    873     if((m_period != 0) && ((m_cpt_total_cycles % m_period) == 0))
    874     {
    875         print_stats();
    876         clear_stats();
    877     }
    878902
    879903    m_debug_cleanup_fsm    = (m_cpt_total_cycles > m_debug_start_cycle) and m_debug_ok;
     
    11861210    // - Coherence operation                            => ICACHE_CC_CHEK
    11871211    // Five configurations corresponding to XTN processor requests sent by DCACHE FSM :
    1188     // - Flush TLB                                              => ICACHE_XTN_TLB_FLUSH
    1189     // - Flush cache                                        => ICACHE_XTN_CACHE_FLUSH
     1212    // - Flush TLB                                      => ICACHE_XTN_TLB_FLUSH
     1213    // - Flush cache                                    => ICACHE_XTN_CACHE_FLUSH
    11901214    // - Invalidate a TLB entry                         => ICACHE_XTN_TLB_INVAL
    11911215    // - Invalidate a cache line                        => ICACHE_XTN_CACHE_INVAL_VA@
    11921216    // - Invalidate a cache line using physical address => ICACHE_XTN_CACHE_INVAL_PA
    11931217    // three configurations corresponding to instruction processor requests :
    1194     // - tlb miss                                               => ICACHE_TLB_WAIT
     1218    // - tlb miss                                       => ICACHE_TLB_WAIT
    11951219    // - cacheable read miss                            => ICACHE_MISS_VICTIM
    11961220    // - uncacheable read miss                          => ICACHE_UNC_REQ
     
    12401264                        // for itlb, and with a speculative physical address for icache,
    12411265                        // computed during the previous cycle.
    1242        {
    1243 
    1244            // For instrumentation: flag reset
    1245            r_ireq_isUser_save = false;       
    1246 
     1266    {
    12471267        // coherence request from the target FSM
    12481268        if ( r_tgt_icache_req.read() )
     
    13021322            uint32_t    cache_inst = 0;
    13031323            bool        cache_hit  = false;
    1304 
    1305             // For instrumentation: is User access ?
    1306             r_ireq_isUser_save = (ireq.mode == iss_t::MODE_USER) ? true : false;       
    13071324
    13081325            if ( r_mmu_mode.read() & INS_CACHE_MASK )
     
    14221439                        r_icache_fsm      = ICACHE_MISS_VICTIM;
    14231440                        r_icache_miss_req = true;
    1424                         r_tlb_access_type_save = _CMD_INIT_VAL;
    14251441                    }
    14261442                }
     
    16851701        }
    16861702
    1687         if ( r_vci_rsp_ins_error.read() ) // bus error
    1688         {
     1703        if ( r_vci_rsp_ins_error.read() ) // bus error
     1704        {
    16891705            r_mmu_ietr = MMU_READ_DATA_ILLEGAL_ACCESS;
    16901706            r_mmu_ibvar  = r_icache_vaddr_save.read();
     
    16981714            r_icache_miss_word = 0;
    16991715            r_icache_fsm       = ICACHE_MISS_UPDT; 
    1700         }       
     1716        }       
    17011717        break;
    17021718    }
     
    20262042    case DCACHE_IDLE:   // There is 8 conditions to exit the IDLE state :
    20272043                        // 1) Long write request (DCACHE FSM)   => DCACHE_WRITE_***
    2028                         // 2) Coherence request (TGT FSM)           => DCACHE_CC_CHECK
     2044                        // 2) Coherence request (TGT FSM)       => DCACHE_CC_CHECK
    20292045                        // 3) ITLB miss request (ICACHE FSM)    => DCACHE_TLB_MISS
    2030                         // 4) XTN request (processor)               => DCACHE_XTN_*
    2031                         // 5) DTLB miss (processor)                 => DCACHE_TLB_MISS
     2046                        // 4) XTN request (processor)           => DCACHE_XTN_*
     2047                        // 5) DTLB miss (processor)             => DCACHE_TLB_MISS
    20322048                        // 6) Cacheable read miss (processor)   => DCACHE_MISS_VICTIM
    2033                         // 7) Uncacheable read (processor)          => DCACHE_UNC_REQ
    2034                         // 8) SC access (processor)                     => DCACHE_SC
     2049                        // 7) Uncacheable read (processor)      => DCACHE_UNC_REQ
     2050                        // 8) SC access (processor)             => DCACHE_SC
    20352051                        // There is 4 configurations to access the cache,
    20362052                        // depending on the pipe-line state, defined
     
    20612077        bool long_write_set_dirty = false;
    20622078        bool tlb_inval_frozen     = false;
    2063        
    2064         // For instrumentation: flag reset
    2065         r_dreq_isUser_save = false;       
    20662079
    20672080        if ( r_dcache_p1_valid.read() )         // P2 stage activated
     
    21282141
    21292142#if DEBUG_DCACHE
    2130             if ( m_debug_dcache_fsm )
    2131             {
    2132                 if ( cache_updt )
    2133                     std::cout << "  <PROC.DCACHE_IDLE> P2 stage: cache update" << std::dec
    2134                               << " / way = " << cache_way
    2135                               << " / set = " << cache_set
    2136                               << " / word = " << cache_word << std::hex
    2137                               << " / wdata = " << wdata
    2138                               << " / be = " << be << std::endl;
    2139                 if ( long_write_set_dirty )
    2140                     std::cout << "  <PROC.DCACHE_IDLE> P2 stage: dirty bit update required"
    2141                               << " / pte_paddr = " << std::hex << pte_paddr << std::endl;
    2142             }
     2143if ( m_debug_dcache_fsm )
     2144{
     2145    if ( cache_updt )
     2146        std::cout << "  <PROC.DCACHE_IDLE> P2 stage: cache update" << std::dec
     2147                  << " / way = " << cache_way
     2148                  << " / set = " << cache_set
     2149                  << " / word = " << cache_word << std::hex
     2150                  << " / wdata = " << wdata
     2151                  << " / be = " << be << std::endl;
     2152    if ( long_write_set_dirty )
     2153        std::cout << "  <PROC.DCACHE_IDLE> P2 stage: dirty bit update required"
     2154                  << " / pte_paddr = " << std::hex << pte_paddr << std::endl;
     2155}
    21432156#endif
    21442157        } // end P2 stage
     
    23952408
    23962409                    case iss_t::XTN_MMU_PARAMS:
    2397                         //drsp.rdata = r_mmu_params.read();
    2398                         drsp.rdata = m_mmu_params;
     2410                        drsp.rdata = r_mmu_params.read();
    23992411                        drsp.valid = true;
    24002412                        break;
    24012413
    24022414                    case iss_t::XTN_MMU_RELEASE:
    2403                         //drsp.rdata = r_mmu_release.read();
    2404                         drsp.rdata = m_mmu_release;
     2415                        drsp.rdata = r_mmu_release.read();
    24052416                        drsp.valid = true;
    24062417                        break;
     
    25522563            else
    25532564            {
    2554                
    2555                 // For instrumentation: is User access ?
    2556                 r_dreq_isUser_save = (dreq.mode == iss_t::MODE_USER) ? true : false;       
    2557 
    25582565                bool    valid_req = false;
    25592566                bool    cacheable = false;
     
    26522659                                if ( not r_dcache_cleanup_req.read() )
    26532660                                {
    2654                                     r_dcache_vci_paddr     = paddr;
    2655                                     r_dcache_vci_miss_req  = true;
    2656                                     r_dcache_miss_type     = PROC_MISS;
    2657                                     r_dcache_fsm           = DCACHE_MISS_VICTIM;
    2658                                     r_tlb_access_type_save = _CMD_INIT_VAL;
     2661                                    r_dcache_vci_paddr    = paddr;
     2662                                    r_dcache_vci_miss_req = true;
     2663                                    r_dcache_miss_type    = PROC_MISS;
     2664                                    r_dcache_fsm          = DCACHE_MISS_VICTIM;
    26592665                                }
    26602666                            }
     
    28322838if ( m_debug_dcache_fsm )
    28332839{
    2834     std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache, but unmapped:" << std::hex
     2840    std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache, but unmapped:"
    28352841              << std::dec << " way = " << way
    28362842              << std::dec << " / set = " << set
     
    28632869if ( m_debug_dcache_fsm )
    28642870{
    2865     std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache " << std::hex
     2871    std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache "
    28662872              << std::dec << " way = " << way
    28672873              << std::dec << " / set = " << set
     
    28862892if ( m_debug_dcache_fsm )
    28872893{
    2888     std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache:" << std::hex
     2894    std::cout << "  <PROC.DCACHE_TLB_PTE1_GET> HIT in dcache:"
    28892895              << std::dec << " way = " << way
    28902896              << std::dec << " / set = " << set
     
    29012907            r_dcache_fsm           = DCACHE_MISS_VICTIM;         
    29022908            r_dcache_vci_miss_req  = true;             
    2903             r_tlb_access_type_save = (r_dcache_tlb_ins.read()) ? _CMD_ITLB : _CMD_DTLB;
    29042909
    29052910#if DEBUG_DCACHE
     
    31163121            r_dcache_fsm          = DCACHE_MISS_VICTIM;
    31173122            r_dcache_vci_miss_req = true;
    3118             r_tlb_access_type_save = (r_dcache_tlb_ins.read()) ? _CMD_ITLB : _CMD_DTLB;
    31193123
    31203124#if DEBUG_DCACHE
     
    32673271                                        // we don't analyse the response, because
    32683272                                        // we don't care if the L/R bit update is not done
    3269                                         // we must take the coherence requests because
    3270                                         // there is a risk of dead-lock
    3271 
    3272     {
    3273         // external coherence request
    3274         if ( r_tgt_dcache_req )
    3275         {
    3276             r_dcache_fsm = DCACHE_CC_CHECK;
    3277             r_dcache_fsm_save = r_dcache_fsm;
    3278             break;
    3279         }
    3280 
     3273    {
    32813274        if ( not r_dcache_vci_sc_req.read() )   // response available
    32823275        {
     
    33263319            r_dcache_fsm = DCACHE_IDLE;
    33273320        }
    3328 
    33293321        break;
    33303322    }
     
    33763368
    33773369            bool        cleanup_req = r_dcache.inval( way,
    3378                                                   set,
    3379                                                   &nline );
     3370                                                      set,
     3371                                                      &nline );
    33803372            if ( cleanup_req )
    33813373            {
     
    35703562if ( m_debug_dcache_fsm )
    35713563{
    3572     std::cout << "  <PROC.DCACHE_MISS_VICTIM> Select a slot:" << std::hex
     3564    std::cout << "  <PROC.DCACHE_MISS_VICTIM> Select a slot:"
    35733565              << " / way = "   << way
    35743566              << " / set = "   << set
     
    35813573    ///////////////////////
    35823574    case DCACHE_MISS_INVAL:             // invalidate the victim line
    3583                                 // and possibly request itlb or dtlb invalidate
     3575                                        // and possibly request itlb or dtlb invalidate
    35843576    {
    35853577        paddr_t nline;
    35863578        size_t  way = r_dcache_miss_way.read();
    35873579        size_t  set = r_dcache_miss_set.read();
    3588         bool isValid;
    3589 
    3590         isValid = r_dcache.inval( way,
    3591                                   set,
    3592                                   &nline );
    3593 
    3594 
    3595         std::cout << "DMISS_INVAL: way " << way
    3596                   << " / set " << set
    3597                   << " / nline " << std::hex << nline
    3598                   << " / isValid " << isValid
    3599                   << std::endl;
     3580
     3581        r_dcache.inval( way,
     3582                        set,
     3583                        &nline );
    36003584
    36013585        // if itlb & dtlb invalidate are required
     
    36043588             ( r_dcache_in_itlb[way*m_dcache_sets+set] or
    36053589               r_dcache_in_dtlb[m_dcache_sets*way+set] ) )
    3606         {       
    3607             r_dcache_tlb_inval_line = r_dcache_vci_paddr.read() >> (uint32_log2(m_dcache_words)+2);
    3608             r_dcache_itlb_inval_req  = r_dcache_in_itlb[way*m_dcache_sets+set];
    3609             r_dcache_in_itlb[way*m_dcache_sets+set] = false;
    3610             r_dcache_dtlb_inval_req  = r_dcache_in_dtlb[way*m_dcache_sets+set];
    3611             r_dcache_in_dtlb[way*m_dcache_sets+set] = false;
     3590        {       
     3591            r_dcache_tlb_inval_line = r_dcache_vci_paddr.read() >> (uint32_log2(m_dcache_words)+2);
     3592            r_dcache_itlb_inval_req  = r_dcache_in_itlb[way*m_dcache_sets+set];
     3593            r_dcache_in_itlb[way*m_dcache_sets+set] = false;
     3594            r_dcache_dtlb_inval_req  = r_dcache_in_dtlb[way*m_dcache_sets+set];
     3595            r_dcache_in_dtlb[way*m_dcache_sets+set] = false;
    36123596            r_dcache_fsm = DCACHE_MISS_INVAL_WAIT;
    3613         }
     3597        }
    36143598        else
    36153599        {
    36163600            r_dcache_fsm = DCACHE_MISS_WAIT;
    36173601        }
    3618 
    36193602        break;
    36203603    }
     
    36983681        {
    36993682            r_dcache_miss_word = 0;
    3700             r_dcache_fsm       = DCACHE_MISS_UPDT;
     3683            r_dcache_fsm       = DCACHE_MISS_UPDT;
    37013684        }       
    37023685        break;
     
    37843767    else
    37853768    {
    3786         std::cout << "  <PROC.DCACHE_MISS_UPDT> Write one word:" << std::hex
     3769        std::cout << "  <PROC.DCACHE_MISS_UPDT> Write one word:"
    37873770                  << " address = " << r_dcache_vci_paddr.read()
    37883771                  << " / data = "  << r_vci_rsp_fifo_dcache.read()
     
    38513834m_cpt_dcache_data_read++;
    38523835m_cpt_dcache_dir_read++;
    3853 #endif
     3836#endif;
    38543837
    38553838#if DEBUG_DCACHE
    38563839if ( m_debug_dcache_fsm )
    38573840{
    3858     std::cout << "  <PROC.DCACHE_WRITE_TLB_DIRTY> Set PTE dirty bit in dtlb:" << std::hex
     3841    std::cout << "  <PROC.DCACHE_WRITE_TLB_DIRTY> Set PTE dirty bit in dtlb:"
    38593842              << " paddr = " << r_dcache_p2_pte_paddr.read()
    38603843              << " / tlb_way = " << r_dcache_p2_tlb_way.read()
     
    38893872if ( m_debug_dcache_fsm )
    38903873{
    3891     std::cout << "  <PROC.DCACHE_WRITE_CACHE_DIRTY> Set PTE dirty bit in dcache:" << std::hex
     3874    std::cout << "  <PROC.DCACHE_WRITE_CACHE_DIRTY> Set PTE dirty bit in dcache:"
    38923875              << " / way = " << r_dcache_p2_pte_way.read()
    38933876              << " / set = " << r_dcache_p2_pte_set.read()
     
    41564139    std::cout << "  <PROC.DCACHE_CC_UPDT> Update one word :" << std::dec
    41574140              << " way = " << way
    4158               << " / set = " << set
     4141              << " / set = " << set
    41594142              << " / word = " << word
    41604143              << " / value = " << std::hex << r_tgt_buf[word] << std::endl;
     
    42624245    {
    42634246        m_cpt_frz_cycles++;             // used for instrumentation
    4264 
    4265         if(dreq.valid and not drsp.valid)
    4266             m_cpt_dcache_frz_cycles++;
    4267        
    42684247        m_cpt_stop_simulation++;        // used for debug
    42694248        if ( m_cpt_stop_simulation > m_max_frozen_cycles )
     
    43634342                r_icache_miss_req    = false;
    43644343                r_vci_cmd_imiss_prio = false;
    4365 //              m_cpt_imiss_transaction++;
     4344//                m_cpt_imiss_transaction++;
    43664345            }
    43674346            // 4 - Instruction Uncachable
     
    43704349                r_vci_cmd_fsm    = CMD_INS_UNC;
    43714350                r_icache_unc_req = false;
    4372 //              m_cpt_iunc_transaction++;
     4351//                m_cpt_iunc_transaction++;
    43734352            }
    43744353            // 5 - Data Write
     
    43794358                r_vci_cmd_min       = wbuf_min;
    43804359                r_vci_cmd_max       = wbuf_max;
    4381 //              m_cpt_write_transaction++;
    4382 //              m_length_write_transaction += (wbuf_max-wbuf_min+1);
     4360//                m_cpt_write_transaction++;
     4361//                m_length_write_transaction += (wbuf_max-wbuf_min+1);
    43834362            }
    43844363            // 6 - Data Store Conditionnal
     
    48274806        p_vci_ini_d.cmd     = vci_param::CMD_READ;
    48284807        p_vci_ini_d.eop     = true;
    4829         p_vci_ini_d.pktid   = (r_ireq_isUser_save == true) ? _CMD_USR : 0;
    48304808        break;
    48314809
     
    48394817        p_vci_ini_d.cmd     = vci_param::CMD_READ;
    48404818        p_vci_ini_d.eop     = true;
    4841         p_vci_ini_d.pktid  = (r_ireq_isUser_save == true) ? _CMD_USR : 0;
    48424819        break;
    48434820
     
    48514828        p_vci_ini_d.cmd     = vci_param::CMD_READ;
    48524829        p_vci_ini_d.eop     = true;
    4853         p_vci_ini_d.pktid   = (r_dreq_isUser_save == true) ? _CMD_USR | r_tlb_access_type_save.read() : 0;
    48544830        break;
    48554831
     
    48634839        p_vci_ini_d.cmd     = vci_param::CMD_READ;
    48644840        p_vci_ini_d.eop     = true;
    4865         p_vci_ini_d.pktid   = (r_dreq_isUser_save == true) ? _CMD_USR : 0;
    48664841        break;
    48674842
     
    48754850        p_vci_ini_d.cmd     = vci_param::CMD_WRITE;
    48764851        p_vci_ini_d.eop     = (r_vci_cmd_cpt.read() == r_vci_cmd_max.read());
    4877         p_vci_ini_d.pktid   = (r_dreq_isUser_save == true) ? _CMD_USR : 0;
    48784852        break;
    48794853
     
    48884862        p_vci_ini_d.cmd     = vci_param::CMD_STORE_COND;
    48894863        p_vci_ini_d.eop     = (r_vci_cmd_cpt.read() == 1);
    4890         p_vci_ini_d.pktid   = (r_dreq_isUser_save == true) ? _CMD_USR : 0;
    48914864        break;     
    48924865    } // end switch r_vci_cmd_fsm
Note: See TracChangeset for help on using the changeset viewer.