Ignore:
Timestamp:
Jun 26, 2014, 3:24:15 PM (10 years ago)
Author:
alain
Message:

Introducing a single word feature in the cache_monitor() function.

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

Legend:

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

    r683 r722  
    519519      void print_stats(bool activity_counters = true, bool stats = true);
    520520      void print_trace( size_t detailed = 0 );
    521       void cache_monitor(addr_t addr);
     521      void cache_monitor(addr_t addr, bool single_word = false);
    522522      void start_monitor(addr_t addr, addr_t length);
    523523      void stop_monitor();
  • trunk/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp

    r683 r722  
    581581
    582582
    583     /////////////////////////////////////////////////////
    584     tmpl(void)::cache_monitor(addr_t addr)
    585     /////////////////////////////////////////////////////
     583    //////////////////////////////////////////////////////////
     584    tmpl(void)::cache_monitor(addr_t addr, bool single_word)
     585    //////////////////////////////////////////////////////////
    586586    {
    587         size_t way = 0;
    588         size_t set = 0;
     587        size_t way  = 0;
     588        size_t set  = 0;
     589        size_t word = ((size_t)addr & 0x3F) >> 2;
     590       
    589591        DirectoryEntry entry = m_cache_directory.read_neutral(addr, &way, &set);
    590592
     
    593595        if (entry.valid)
    594596        {
    595             for (size_t word = 0; word<m_words; word++)
     597            if (single_word )
    596598            {
    597599                m_debug_data[word] = m_cache_data.read(way, set, word);
    598                 if (m_debug_previous_valid and
    599                         (m_debug_data[word] != m_debug_previous_data[word]))
     600                if ( m_debug_previous_valid and
     601                     (m_debug_data[word] != m_debug_previous_data[word]) )
    600602                {
    601603                    data_change = true;
     604                }
     605            }
     606            else
     607            {
     608                for (size_t wcur = 0; wcur < m_words; wcur++)
     609                {
     610                    m_debug_data[wcur] = m_cache_data.read(way, set, wcur);
     611                    if ( m_debug_previous_valid and
     612                         (m_debug_data[wcur] != m_debug_previous_data[wcur]) )
     613                    {
     614                        data_change = true;
     615                    }
    602616                }
    603617            }
     
    610624        {
    611625            std::cout << "Monitor MEMC " << name()
    612                 << " at cycle " << std::dec << m_cpt_cycles
    613                 << " for address " << std::hex << addr
    614                 << " / VAL = " << std::dec << entry.valid
    615                 << " / WAY = " << way
    616                 << " / COUNT = " << entry.count
    617                 << " / DIRTY = " << entry.dirty
    618                 << " / DATA_CHANGE = " << data_change
    619                 << std::endl;
    620             std::cout << std::hex << "     /0:" << m_debug_data[0]
    621                 << "/1:" << m_debug_data[1]
    622                 << "/2:" << m_debug_data[2]
    623                 << "/3:" << m_debug_data[3]
    624                 << "/4:" << m_debug_data[4]
    625                 << "/5:" << m_debug_data[5]
    626                 << "/6:" << m_debug_data[6]
    627                 << "/7:" << m_debug_data[7]
    628                 << "/8:" << m_debug_data[8]
    629                 << "/9:" << m_debug_data[9]
    630                 << "/A:" << m_debug_data[10]
    631                 << "/B:" << m_debug_data[11]
    632                 << "/C:" << m_debug_data[12]
    633                 << "/D:" << m_debug_data[13]
    634                 << "/E:" << m_debug_data[14]
    635                 << "/F:" << m_debug_data[15]
    636                 << std::endl;
     626                      << " at cycle " << std::dec << m_cpt_cycles
     627                      << " for address " << std::hex << addr
     628                      << " / VAL = " << std::dec << entry.valid
     629                      << " / WAY = " << way
     630                      << " / COUNT = " << entry.count
     631                      << " / DIRTY = " << entry.dirty
     632                      << " / DATA_CHANGE = " << data_change;
     633            if ( single_word )
     634            {
     635                 std::cout << std::hex << " / value = " << m_debug_data[word] << std::endl;
     636            }
     637            else
     638            {
     639                std::cout << std::hex << std::endl
     640                          << "/0:" << m_debug_data[0]
     641                          << "/1:" << m_debug_data[1]
     642                          << "/2:" << m_debug_data[2]
     643                          << "/3:" << m_debug_data[3]
     644                          << "/4:" << m_debug_data[4]
     645                          << "/5:" << m_debug_data[5]
     646                          << "/6:" << m_debug_data[6]
     647                          << "/7:" << m_debug_data[7]
     648                          << "/8:" << m_debug_data[8]
     649                          << "/9:" << m_debug_data[9]
     650                          << "/A:" << m_debug_data[10]
     651                          << "/B:" << m_debug_data[11]
     652                          << "/C:" << m_debug_data[12]
     653                          << "/D:" << m_debug_data[13]
     654                          << "/E:" << m_debug_data[14]
     655                          << "/F:" << m_debug_data[15]
     656                          << std::endl;
     657            }
    637658        }
    638659
     
    641662        m_debug_previous_valid = entry.valid;
    642663        m_debug_previous_dirty = entry.dirty;
    643         for (size_t word = 0; word < m_words; word++)
    644             m_debug_previous_data[word] = m_debug_data[word];
     664        for (size_t wcur = 0; wcur < m_words; wcur++)
     665            m_debug_previous_data[wcur] = m_debug_data[wcur];
    645666    }
    646667
Note: See TracChangeset for help on using the changeset viewer.