Ignore:
Timestamp:
May 19, 2016, 3:01:50 PM (8 years ago)
Author:
meunier
Message:
  • Fixing bug found by CD in the L1 cache: the flushing of the cache didn't flush the last line of the last way
File:
1 edited

Legend:

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

    r970 r1041  
    13831383            size_t set = r_icache_flush_count.read() % m_icache_sets;
    13841384
     1385            if (r_icache_flush_count.read() == (m_icache_sets * m_icache_ways))  // last slot
     1386            {
     1387                r_dcache_xtn_req = false;
     1388                m_drsp.valid = true;
     1389                r_icache_fsm = ICACHE_IDLE;
     1390                break;
     1391            }
     1392
     1393
    13851394#ifdef INSTRUMENTATION
    13861395            m_cpt_icache_dir_read++;
     
    14041413                r_icache_fsm      = ICACHE_XTN_CACHE_FLUSH_GO;
    14051414            }
    1406             else if (r_icache_flush_count.read() ==
    1407                       (m_icache_sets*m_icache_ways - 1))  // last slot
    1408             {
    1409                 r_dcache_xtn_req = false;
    1410                 m_drsp.valid = true;
    1411                 r_icache_fsm = ICACHE_IDLE;
    1412             }
    1413 
    1414             // saturation counter, to have the same last slot condition
    1415             // in ICACHE_XTN_CACHE_FLUSH and ICACHE_XTN_CACHE_FLUSH_GO states
    1416             if (r_icache_flush_count.read() < (m_icache_sets * m_icache_ways - 1))
    1417             {
     1415            else {
     1416                // saturation counter, to have the same last slot condition
     1417                // in ICACHE_XTN_CACHE_FLUSH and ICACHE_XTN_CACHE_FLUSH_GO states
    14181418                r_icache_flush_count = r_icache_flush_count.read() + 1;
    14191419            }
     
    14351435                           CACHE_SLOT_STATE_ZOMBI);
    14361436
    1437         if (r_icache_flush_count.read() ==
    1438                       (m_icache_sets*m_icache_ways - 1))  // last slot
    1439         {
    1440             r_dcache_xtn_req = false;
    1441             m_drsp.valid = true;
     1437        if (r_icache_flush_count.read() == (m_icache_sets * m_icache_ways - 1))  // last slot
     1438        {
    14421439            r_icache_fsm = ICACHE_IDLE;
    1443         }
    1444         else
    1445         {
    1446             r_icache_fsm = ICACHE_XTN_CACHE_FLUSH;
    1447         }
     1440            break;
     1441        }
     1442        r_icache_flush_count = r_icache_flush_count.read() + 1;
     1443        r_icache_fsm = ICACHE_XTN_CACHE_FLUSH;
    14481444        break;
    14491445    }
Note: See TracChangeset for help on using the changeset viewer.