ruby: give access to cache tag/data latencies from SLICC
authorDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
committerDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
This patch exposes the tag and data array latencies to the SLICC state machines
so that it can be used to determine the correct enqueue latency for response
messages.

src/mem/protocol/RubySlicc_Types.sm
src/mem/ruby/structures/BankedArray.hh
src/mem/ruby/structures/CacheMemory.hh

index fb506781cc6142c93e55d97bb1a193b2a2d09c1d..88b9839bb4b426ebc475147639e415380c1ba47b 100644 (file)
@@ -149,6 +149,8 @@ structure (CacheMemory, external = "yes") {
   void deallocate(Address);
   AbstractCacheEntry lookup(Address);
   bool isTagPresent(Address);
+  Cycles getTagLatency();
+  Cycles getDataLatency();
   void setMRU(Address);
   void recordRequestType(CacheRequestType);
   bool checkResourceAvailable(CacheResourceType, Address);
index 5cc3eee32c627b768bb4b470eaffc236787ecedb..dbfee9994064de3a2664f4c5efce64ff31481361 100644 (file)
@@ -70,6 +70,7 @@ class BankedArray
     // This is so we don't get aliasing on blocks being replaced
     bool tryAccess(int64 idx);
 
+    Cycles getLatency() const { return accessLatency; }
 };
 
 #endif
index 4724da2b8afd73525bf734974efd91b6141ae9ce..647520566a53e677dfc700b899a09270ff1147b1 100644 (file)
@@ -91,6 +91,9 @@ class CacheMemory : public SimObject
     const AbstractCacheEntry* lookup(const Address& address) const;
 
     Cycles getLatency() const { return m_latency; }
+    Cycles getTagLatency() const { return tagArray.getLatency(); }
+    Cycles getDataLatency() const { return dataArray.getLatency(); }
+
 
     // Hook for checkpointing the contents of the cache
     void recordCacheContents(int cntrl, CacheRecorder* tr) const;