Index: /trunk/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h
===================================================================
--- /trunk/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h	(revision 721)
+++ /trunk/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h	(revision 722)
@@ -519,5 +519,5 @@
       void print_stats(bool activity_counters = true, bool stats = true);
       void print_trace( size_t detailed = 0 );
-      void cache_monitor(addr_t addr);
+      void cache_monitor(addr_t addr, bool single_word = false);
       void start_monitor(addr_t addr, addr_t length);
       void stop_monitor();
Index: /trunk/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp
===================================================================
--- /trunk/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp	(revision 721)
+++ /trunk/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp	(revision 722)
@@ -581,10 +581,12 @@
 
 
-    /////////////////////////////////////////////////////
-    tmpl(void)::cache_monitor(addr_t addr)
-    /////////////////////////////////////////////////////
+    //////////////////////////////////////////////////////////
+    tmpl(void)::cache_monitor(addr_t addr, bool single_word)
+    //////////////////////////////////////////////////////////
     {
-        size_t way = 0;
-        size_t set = 0;
+        size_t way  = 0;
+        size_t set  = 0;
+        size_t word = ((size_t)addr & 0x3F) >> 2;
+        
         DirectoryEntry entry = m_cache_directory.read_neutral(addr, &way, &set);
 
@@ -593,11 +595,23 @@
         if (entry.valid)
         {
-            for (size_t word = 0; word<m_words; word++)
+            if (single_word )
             {
                 m_debug_data[word] = m_cache_data.read(way, set, word);
-                if (m_debug_previous_valid and 
-                        (m_debug_data[word] != m_debug_previous_data[word]))
+                if ( m_debug_previous_valid and 
+                     (m_debug_data[word] != m_debug_previous_data[word]) )
                 {
                     data_change = true;
+                }
+            }
+            else
+            {
+                for (size_t wcur = 0; wcur < m_words; wcur++)
+                {
+                    m_debug_data[wcur] = m_cache_data.read(way, set, wcur);
+                    if ( m_debug_previous_valid and 
+                         (m_debug_data[wcur] != m_debug_previous_data[wcur]) )
+                    {
+                        data_change = true;
+                    }
                 }
             }
@@ -610,29 +624,36 @@
         {
             std::cout << "Monitor MEMC " << name()
-                << " at cycle " << std::dec << m_cpt_cycles
-                << " for address " << std::hex << addr
-                << " / VAL = " << std::dec << entry.valid
-                << " / WAY = " << way
-                << " / COUNT = " << entry.count 
-                << " / DIRTY = " << entry.dirty
-                << " / DATA_CHANGE = " << data_change 
-                << std::endl;
-            std::cout << std::hex << "     /0:" << m_debug_data[0]
-                << "/1:" << m_debug_data[1]
-                << "/2:" << m_debug_data[2]
-                << "/3:" << m_debug_data[3]
-                << "/4:" << m_debug_data[4]
-                << "/5:" << m_debug_data[5]
-                << "/6:" << m_debug_data[6]
-                << "/7:" << m_debug_data[7]
-                << "/8:" << m_debug_data[8]
-                << "/9:" << m_debug_data[9]
-                << "/A:" << m_debug_data[10]
-                << "/B:" << m_debug_data[11]
-                << "/C:" << m_debug_data[12]
-                << "/D:" << m_debug_data[13]
-                << "/E:" << m_debug_data[14]
-                << "/F:" << m_debug_data[15]
-                << std::endl;
+                      << " at cycle " << std::dec << m_cpt_cycles
+                      << " for address " << std::hex << addr
+                      << " / VAL = " << std::dec << entry.valid
+                      << " / WAY = " << way
+                      << " / COUNT = " << entry.count 
+                      << " / DIRTY = " << entry.dirty
+                      << " / DATA_CHANGE = " << data_change; 
+            if ( single_word )
+            {
+                 std::cout << std::hex << " / value = " << m_debug_data[word] << std::endl;
+            }
+            else
+            {
+                std::cout << std::hex << std::endl
+                          << "/0:" << m_debug_data[0]
+                          << "/1:" << m_debug_data[1]
+                          << "/2:" << m_debug_data[2]
+                          << "/3:" << m_debug_data[3]
+                          << "/4:" << m_debug_data[4]
+                          << "/5:" << m_debug_data[5]
+                          << "/6:" << m_debug_data[6]
+                          << "/7:" << m_debug_data[7]
+                          << "/8:" << m_debug_data[8]
+                          << "/9:" << m_debug_data[9]
+                          << "/A:" << m_debug_data[10]
+                          << "/B:" << m_debug_data[11]
+                          << "/C:" << m_debug_data[12]
+                          << "/D:" << m_debug_data[13]
+                          << "/E:" << m_debug_data[14]
+                          << "/F:" << m_debug_data[15]
+                          << std::endl;
+            }
         }
 
@@ -641,6 +662,6 @@
         m_debug_previous_valid = entry.valid;
         m_debug_previous_dirty = entry.dirty;
-        for (size_t word = 0; word < m_words; word++) 
-            m_debug_previous_data[word] = m_debug_data[word];
+        for (size_t wcur = 0; wcur < m_words; wcur++) 
+            m_debug_previous_data[wcur] = m_debug_data[wcur];
     }
 
