diff -r 03ce870a5145 -r 58e6081c3e49 src/mem/cache/cache_impl.hh --- a/src/mem/cache/cache_impl.hh Tue Jun 04 18:52:36 2013 +0100 +++ b/src/mem/cache/cache_impl.hh Tue Jun 04 18:53:12 2013 +0100 @@ -929,7 +929,7 @@ // responseLatency is the latency of the return path // from lower level caches/memory to an upper level cache or // the core. - completion_time = curTick() + responseLatency * clockPeriod() + + completion_time = clockEdge(responseLatency) + (transfer_offset ? pkt->busLastWordDelay : pkt->busFirstWordDelay); @@ -946,14 +946,14 @@ // responseLatency is the latency of the return path // from lower level caches/memory to an upper level cache or // the core. - completion_time = curTick() + responseLatency * clockPeriod() + + completion_time = clockEdge(responseLatency) + pkt->busLastWordDelay; target->pkt->req->setExtraData(0); } else { // not a cache fill, just forwarding response // responseLatency is the latency of the return path // from lower level cahces/memory to the core. - completion_time = curTick() + responseLatency * clockPeriod() + + completion_time = clockEdge(responseLatency) + pkt->busLastWordDelay; if (pkt->isRead() && !is_error) { target->pkt->setData(pkt->getPtr()); @@ -1021,7 +1021,7 @@ } mq = mshr->queue; mq->markPending(mshr); - requestMemSideBus((RequestCause)mq->index, curTick() + + requestMemSideBus((RequestCause)mq->index, clockEdge() + pkt->busLastWordDelay); } else { mq->deallocate(mshr); @@ -1257,7 +1257,7 @@ std::memcpy(blk->data, pkt->getPtr(), blkSize); } - blk->whenReady = curTick() + responseLatency * clockPeriod() + + blk->whenReady = clockEdge() + responseLatency * clockPeriod() + pkt->busLastWordDelay; return blk;