892a893,901
> BaseCache::calculateTagOnlyLatency(const uint32_t delay,
> const Cycles lookup_lat) const
> {
> // A tag-only access has to wait for the packet to arrive in order to
> // perform the tag lookup.
> return ticksToCycles(delay) + lookup_lat;
> }
>
> Cycles
917,919c926,929
< // In case of a miss, apply lookup latency on top of the metadata
< // delay, as the access can only start when it arrives.
< lat = ticksToCycles(delay) + lookup_lat;
---
> // In case of a miss, we neglect the data access in a parallel
> // configuration (i.e., the data access will be stopped as soon as
> // we find out it is a miss), and use the tag-only latency.
> lat = calculateTagOnlyLatency(delay, lookup_lat);
940,944d949
< // Calculate access latency on top of when the packet arrives. This
< // takes into account the bus delay.
< lat = calculateAccessLatency(blk, pkt->headerDelay,
< tag_latency);
<
954a960,964
>
> // Calculate access latency on top of when the packet arrives. This
> // takes into account the bus delay.
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
983a994,997
>
> // A clean evict does not need to access the data array
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
1008a1023,1030
>
> // A writeback searches for the block, then writes the data.
> // As the writeback is being dropped, the data is not touched,
> // and we just had to wait for the time to find a match in the
> // MSHR. As of now assume a mshr queue search takes as long as
> // a tag lookup for simplicity.
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
1017a1040,1044
>
> // A writeback searches for the block, then writes the data.
> // As the block could not be found, it was a tag-only access.
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
1045a1073,1076
>
> // A writeback searches for the block, then writes the data
> lat = calculateAccessLatency(blk, pkt->headerDelay, tag_latency);
>
1047a1079,1081
> // A CleanEvict does not need to access the data array
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
1068a1103,1106
> // A writeback searches for the block, then writes the data.
> // As the block could not be found, it was a tag-only access.
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
>
1078a1117,1123
>
> // A writeback searches for the block, then writes the
> // data. As the block could not be found, it was a tag-only
> // access.
> lat = calculateTagOnlyLatency(pkt->headerDelay,
> tag_latency);
>
1106a1152,1154
> // A writeback searches for the block, then writes the data
> lat = calculateAccessLatency(blk, pkt->headerDelay, tag_latency);
>
1116a1165,1171
> // Calculate access latency based on the need to access the data array
> if (pkt->isRead() || pkt->isWrite()) {
> lat = calculateAccessLatency(blk, pkt->headerDelay, tag_latency);
> } else {
> lat = calculateTagOnlyLatency(pkt->headerDelay, tag_latency);
> }
>
1124a1180,1181
> lat = calculateAccessLatency(blk, pkt->headerDelay, tag_latency);
>