Index: trunk/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h
===================================================================
--- trunk/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h	(revision 421)
+++ trunk/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h	(revision 423)
@@ -677,4 +677,7 @@
 
     uint32_t m_cpt_stop_simulation;		// used to stop simulation if frozen
+    bool     m_monitor_ok;		// used to stop simulation if frozen
+    uint32_t m_monitor_base;		// used to stop simulation if frozen
+    uint32_t m_monitor_length;		// used to stop simulation if frozen
 
 protected:
@@ -713,4 +716,6 @@
     void print_trace(size_t mode = 0);
     void cache_monitor(paddr_t addr);
+    void start_monitor(paddr_t,paddr_t);
+    void stop_monitor();
     inline void iss_set_debug_mask(uint v) 
     {
Index: trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
===================================================================
--- trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 421)
+++ trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 423)
@@ -128,4 +128,22 @@
         "CMD_DATA_SC",
         "CMD_DATA_CAS",
+    };
+
+const char *vci_pktid_type_str[] = {
+        "TYPE_READ_DATA_UNC",
+        "TYPE_READ_DATA_MISS",            
+        "TYPE_READ_INS_UNC",          
+        "TYPE_READ_INS_MISS",
+        "TYPE_WRITE",
+        "TYPE_CAS",
+        "TYPE_LL",
+        "TYPE_SC",
+    };
+
+const char *vci_cmd_type_str[] = {
+        "NOP or STORE_COND",
+        "READ",
+        "WRITE",
+        "LOCKED_READ"
     };
 
@@ -888,4 +906,5 @@
         // init the llsc reservation buffer
         r_dcache_llsc_valid = false;
+        m_monitor_ok = false;
 
         return;
@@ -1804,8 +1823,8 @@
         else  								                            // no match
         {
-            int	        state;
-            size_t 	    way;
-            size_t 	    set;
-            size_t 	    word;
+            int	        state = 0;
+            size_t 	    way = 0;
+            size_t 	    set = 0;
+            size_t 	    word = 0;
 
 #ifdef INSTRUMENTATION
@@ -3885,9 +3904,9 @@
         if ( not r_dcache_cc_send_req.read() ) // blocked until previous cc_send request is sent
         {
-            bool     found;
-            bool     cleanup;
-            size_t   way;
-            size_t   set;
-            paddr_t  victim;
+            bool     found = false;
+            bool     cleanup = false;
+            size_t   way = 0;
+            size_t   set = 0;
+            paddr_t  victim = 0;
 
 #ifdef INSTRUMENTATION
@@ -4481,8 +4500,8 @@
         else                                                    // no match
 	    {
-            int        state;
-            size_t 	   way;
-            size_t 	   set;
-            size_t	   word;
+            int        state = 0;
+            size_t 	   way = 0;
+            size_t 	   set = 0;
+            size_t	   word = 0;
 
 #ifdef INSTRUMENTATION
@@ -4920,4 +4939,5 @@
     ////////////////////////////////////////////////////////////////////////////////////
 
+
     switch ( r_vci_cmd_fsm.read() )
     {
@@ -5059,5 +5079,7 @@
         {
             // all read VCI commands contain one single flit
-            if ( p_vci.cmdack.read() )  r_vci_cmd_fsm = CMD_IDLE;
+            if ( p_vci.cmdack.read() ) {
+                r_vci_cmd_fsm = CMD_IDLE;
+            }
             break;
         }
@@ -5720,4 +5742,21 @@
     p_vci.cfixed = false;
 
+    if ( m_monitor_ok ) {
+        if ( p_vci.cmdack.read() == true and p_vci.cmdval == true) {
+            if (((p_vci.address.read()) >= m_monitor_base) and 
+                ((p_vci.address.read()) < m_monitor_base + m_monitor_length) ) {
+                std::cout << "CC_VCACHE Monitor " << name() << std::hex
+                          << " Access type = " << vci_cmd_type_str[p_vci.cmd.read()] 
+                          << " Pktid type = " << vci_pktid_type_str[p_vci.pktid.read()]
+                          << " : address = " << p_vci.address.read()
+                          << " / be = " << p_vci.be.read(); 
+                if ( p_vci.cmd.read() == vci_param::CMD_WRITE ) {
+                    std::cout << " / data = " << p_vci.wdata.read();
+                }
+                std::cout << std::dec << std::endl;
+            }
+        }
+    }
+
     switch ( r_vci_cmd_fsm.read() ) {
 
@@ -6064,7 +6103,7 @@
                 r_cc_receive_updt_fifo_be.empty())
                 or
-                ((r_cc_receive_data_ins.read() == 1) and
+                (((r_cc_receive_data_ins.read() == 1) and
                 not r_cc_receive_icache_req.read()) and
-                r_cc_receive_updt_fifo_be.empty())
+                r_cc_receive_updt_fifo_be.empty()))
                 p_dspin_in.read = true;
             else
@@ -6100,4 +6139,17 @@
 } // end genMoore
 
+tmpl(void)::start_monitor(paddr_t base, paddr_t length)
+// This version of monitor print both Read and Write request
+{
+    m_monitor_ok        = true;
+    m_monitor_base      = base;
+    m_monitor_length    = length;
+}
+
+tmpl(void)::stop_monitor()
+{
+    m_monitor_ok        = false;
+}
+
 }}
 
