Index: branches/reconfiguration/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
===================================================================
--- branches/reconfiguration/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 846)
+++ branches/reconfiguration/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp	(revision 853)
@@ -322,4 +322,5 @@
       r_dcache_vci_sc_req("r_dcache_vci_sc_req"),
       r_dcache_vci_sc_data("r_dcache_vci_sc_data"),
+      r_dcache_vci_miss_trdid("r_dcache_vci_miss_trdid"),
 
       r_dcache_xtn_way("r_dcache_xtn_way"),
@@ -333,4 +334,5 @@
       r_dcache_miss_wdt_max("r_dcache_miss_wdt_max"),
       r_dcache_miss_wdt("r_dcache_miss_wdt"),
+      r_dcache_wdt_timeout("r_dcache_wdt_timeout"),
 
       r_dcache_cc_way("r_dcache_cc_way"),
@@ -816,4 +818,5 @@
         // Reset watchdog timer threshold to max value
         r_dcache_miss_wdt_max      = UINT32_MAX;
+        r_dcache_wdt_timeout       = 0;
 
         // No request from CC_RECEIVE FSM to ICACHE/DCACHE FSMs
@@ -2799,4 +2802,6 @@
 #endif
                                 // request a VCI DMISS transaction
+                                r_dcache_vci_miss_trdid = r_dcache_wdt_timeout.read();
+
                                 r_dcache_vci_paddr    = paddr;
                                 r_dcache_vci_miss_req = true;
@@ -3194,4 +3199,6 @@
         else // we must load the missing cache line in dcache
         {
+            r_dcache_vci_miss_trdid = r_dcache_wdt_timeout.read();
+
             r_dcache_vci_miss_req = true;
             r_dcache_vci_paddr    = r_dcache_tlb_paddr.read();
@@ -3469,4 +3476,6 @@
         else            // we must load the missing cache line in dcache
         {
+            r_dcache_vci_miss_trdid = r_dcache_wdt_timeout.read();
+
             r_dcache_fsm          = DCACHE_MISS_SELECT;
             r_dcache_vci_miss_req = true;
@@ -4296,4 +4305,19 @@
             m_drsp.error = true;
             r_dcache_fsm = DCACHE_IDLE;
+
+            // debug: this counter is used to detect an early WDT timeout.
+            // It is sent as the data miss transactions TRDID. When a data miss
+            // response is treated by the RSP FSM, the RTRDID is compared to
+            // this counter to determine if a timeout was triggered during the
+            // transaction.
+            r_dcache_wdt_timeout = r_dcache_wdt_timeout.read() + 1;
+
+#if DEBUG_DCACHE
+            if (m_debug_dcache_fsm)
+            {
+                std::cout << "  <PROC " << name() << " DCACHE_MISS_WAIT>"
+                             "  watchdog timer exception" << std::endl;
+            }
+#endif
             break;
         }
@@ -5371,29 +5395,32 @@
             r_vci_rsp_cpt = 0;
 
-            if ((p_vci.rpktid.read() & 0x7) ==  TYPE_DATA_UNC)
+            if ((p_vci.rpktid.read() & 0x7) == TYPE_DATA_UNC)
             {
                 r_vci_rsp_fsm = RSP_DATA_UNC;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_READ_DATA_MISS)
-            {
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_READ_DATA_MISS)
+            {
+                // debug: verify that the available response concerns the current transaction.
+                assert(r_dcache_wdt_timeout.read() == p_vci.rtrdid.read());
+
                 r_vci_rsp_fsm = RSP_DATA_MISS;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_READ_INS_UNC)
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_READ_INS_UNC)
             {
                 r_vci_rsp_fsm = RSP_INS_UNC;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_READ_INS_MISS)
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_READ_INS_MISS)
             {
                 r_vci_rsp_fsm = RSP_INS_MISS;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_WRITE)
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_WRITE)
             {
                 r_vci_rsp_fsm = RSP_DATA_WRITE;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_CAS)
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_CAS)
             {
                 r_vci_rsp_fsm = RSP_DATA_UNC;
             }
-            else if ((p_vci.rpktid.read() & 0x7) ==  TYPE_LL)
+            else if ((p_vci.rpktid.read() & 0x7) == TYPE_LL)
             {
                 r_vci_rsp_fsm = RSP_DATA_LL;
@@ -6074,5 +6101,5 @@
         p_vci.wdata   = 0;
         p_vci.be      = 0xF;
-        p_vci.trdid   = 0;
+        p_vci.trdid   = r_dcache_vci_miss_trdid.read();
         p_vci.pktid   = TYPE_READ_DATA_MISS;
         p_vci.plen    = m_dcache_words << 2;
