Index: /trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h
===================================================================
--- /trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h	(revision 244)
+++ /trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h	(revision 245)
@@ -430,8 +430,9 @@
       sc_signal<int>         r_tgt_cmd_fsm;
 
-      size_t nseg;
-      size_t ncseg;
+      size_t                   m_nseg;
+      size_t                   m_ncseg;
       soclib::common::Segment  **m_seg;
       soclib::common::Segment  **m_cseg;
+
       ///////////////////////////////////////////////////////
       // Registers controlled by the READ fsm
Index: /trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp
===================================================================
--- /trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp	(revision 244)
+++ /trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp	(revision 245)
@@ -313,6 +313,6 @@
     r_tgt_cmd_fsm("r_tgt_cmd_fsm"),
     
-    nseg(0),	
-    ncseg(0),	
+    m_nseg(0),	
+    m_ncseg(0),	
 
     r_read_fsm("r_read_fsm"),
@@ -373,19 +373,23 @@
       // Get the segments associated to the MemCache 
       std::list<soclib::common::Segment>::iterator seg;
+      size_t i;
 
       for(seg = m_seglist.begin(); seg != m_seglist.end() ; seg++) {
-        nseg++;
+        m_nseg++;
       }
       for(seg = m_cseglist.begin(); seg != m_cseglist.end() ; seg++) {
-        ncseg++;
+        m_ncseg++;
       }
 
-      m_seg = new soclib::common::Segment*[nseg];
-      size_t i = 0;
+      m_seg = new soclib::common::Segment*[m_nseg];
+
+      i = 0;
       for ( seg = m_seglist.begin() ; seg != m_seglist.end() ; seg++ ) { 
         m_seg[i] = &(*seg);
         i++;
       }
-      m_cseg = new soclib::common::Segment*[ncseg];
+
+      m_cseg = new soclib::common::Segment*[m_ncseg];
+
       i = 0;
       for ( seg = m_cseglist.begin() ; seg != m_cseglist.end() ; seg++ ) { 
@@ -803,4 +807,23 @@
 }
 #endif
+                // checking segmentation violation
+                vci_addr_t  address = p_vci_tgt.address.read();
+                uint32_t    plen    = p_vci_tgt.plen.read();
+                bool found = false;
+                for ( size_t seg_id = 0 ; seg_id < m_nseg ; seg_id++ )
+                {
+                    if ( m_seg[seg_id]->contains(address) &&
+                         m_seg[seg_id]->contains(address + plen - vci_param::B) )
+                    {
+                        found = true;
+                    }
+                }
+                if ( not found )
+                {
+                    std::cout << "VCI_MEM_CACHE ERROR " << name() << std::endl;
+                    std::cout << "Out of segment VCI address in TGT_CMD_IDLE state" << std::endl;
+                    exit(0);
+                }
+
                 if ( p_vci_tgt.cmd.read() == vci_param::CMD_READ ) 
                 {
@@ -3266,5 +3289,5 @@
 
                 bool reached = false;
-                for ( size_t index = 0 ; index < ncseg && !reached ; index++ )
+                for ( size_t index = 0 ; index < m_ncseg && !reached ; index++ )
                 {
                     if ( m_cseg[index]->contains((addr_t)(p_vci_tgt_cleanup.address.read())) )
