gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
base.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2014,2016 ARM Limited
3  * All rights reserved.
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2003-2005 The Regents of The University of Michigan
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions are
19  * met: redistributions of source code must retain the above copyright
20  * notice, this list of conditions and the following disclaimer;
21  * redistributions in binary form must reproduce the above copyright
22  * notice, this list of conditions and the following disclaimer in the
23  * documentation and/or other materials provided with the distribution;
24  * neither the name of the copyright holders nor the names of its
25  * contributors may be used to endorse or promote products derived from
26  * this software without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *
40  * Authors: Erik Hallnor
41  * Ron Dreslinski
42  */
43 
49 #ifndef __BASE_TAGS_HH__
50 #define __BASE_TAGS_HH__
51 
52 #include <string>
53 
54 #include "base/callback.hh"
55 #include "base/statistics.hh"
56 #include "mem/cache/blk.hh"
57 #include "params/BaseTags.hh"
58 #include "sim/clocked_object.hh"
59 
60 class BaseCache;
61 
65 class BaseTags : public ClockedObject
66 {
67  protected:
69  const unsigned blkSize;
71  const Addr blkMask;
73  const unsigned size;
84 
91  bool warmedUp;
92 
94  unsigned numBlocks;
95 
96  // Statistics
106 
109 
116 
122 
125 
128 
131 
134 
137 
140 
145 
150  public:
151  typedef BaseTagsParams Params;
152  BaseTags(const Params *p);
153 
157  virtual ~BaseTags() {}
158 
163  void setCache(BaseCache *_cache);
164 
168  void regStats();
169 
174  virtual void cleanupRefs() {}
175 
179  virtual void computeStats() {}
180 
184  virtual std::string print() const = 0;
185 
189  virtual CacheBlk * findBlock(Addr addr, bool is_secure) const = 0;
190 
197  {
198  return addr & ~blkMask;
199  }
200 
207  {
208  return (addr & blkMask);
209  }
210 
217  virtual CacheBlk *findBlockBySetAndWay(int set, int way) const = 0;
218 
223  virtual void setWayAllocationMax(int ways)
224  {
225  panic("This tag class does not implement way allocation limit!\n");
226  }
227 
232  virtual int getWayAllocationMax() const
233  {
234  panic("This tag class does not implement way allocation limit!\n");
235  return -1;
236  }
237 
238  virtual void invalidate(CacheBlk *blk) = 0;
239 
240  virtual CacheBlk* accessBlock(Addr addr, bool is_secure, Cycles &lat) = 0;
241 
242  virtual Addr extractTag(Addr addr) const = 0;
243 
244  virtual void insertBlock(PacketPtr pkt, CacheBlk *blk) = 0;
245 
246  virtual Addr regenerateBlkAddr(Addr tag, unsigned set) const = 0;
247 
248  virtual CacheBlk* findVictim(Addr addr) = 0;
249 
250  virtual int extractSet(Addr addr) const = 0;
251 
252  virtual void forEachBlk(CacheBlkVisitor &visitor) = 0;
253 };
254 
256 {
258  public:
260  virtual void process() { tags->cleanupRefs(); };
261 };
262 
264 {
266  public:
268  virtual void process() { tags->computeStats(); };
269 };
270 
271 #endif //__BASE_TAGS_HH__
virtual int getWayAllocationMax() const
Get the way allocation mask limit.
Definition: base.hh:232
Stats::Scalar sampledRefs
The number of reference counts sampled.
Definition: base.hh:115
const Cycles lookupLatency
The tag lookup latency of the cache.
Definition: base.hh:75
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:83
bool warmedUp
Marked true when the cache is warmed up.
Definition: base.hh:91
Generic callback class.
Definition: callback.hh:41
virtual void computeStats()
Computes stats just prior to dump event.
Definition: base.hh:179
A stat that calculates the per tick average of a value.
Definition: statistics.hh:2485
virtual void cleanupRefs()
Average in the reference count for valid blocks when the simulation exits.
Definition: base.hh:174
#define panic(...)
Definition: misc.hh:153
virtual CacheBlk * findBlockBySetAndWay(int set, int way) const =0
Find the cache block given set and way.
Stats::Average tagsInUse
Per cycle average of the number of tags that hold valid data.
Definition: base.hh:105
virtual void invalidate(CacheBlk *blk)=0
Stats::Scalar totalRefs
The total number of references to a block before it is replaced.
Definition: base.hh:108
ip6_addr_t addr
Definition: inet.hh:335
virtual ~BaseTags()
Destructor.
Definition: base.hh:157
void regStats()
Register local statistics.
Definition: base.cc:77
Stats::Vector occupanciesTaskId
Occupancy of each context/cpu using the cache.
Definition: base.hh:133
virtual void process()
virtual process function that is invoked when the callback queue is executed.
Definition: base.hh:260
A vector of scalar stats.
Definition: statistics.hh:2499
void setCache(BaseCache *_cache)
Set the parent cache back pointer.
Definition: base.cc:70
virtual CacheBlk * accessBlock(Addr addr, bool is_secure, Cycles &lat)=0
virtual void insertBlock(PacketPtr pkt, CacheBlk *blk)=0
Stats::Vector replacements
Number of replacements of valid blocks per thread.
Definition: base.hh:103
BaseTags(const Params *p)
Definition: base.cc:57
Declaration of Statistics objects.
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2475
BaseTagsCallback(BaseTags *t)
Definition: base.hh:259
Stats::Formula percentOccsTaskId
Occ % of each context/cpu using the cache.
Definition: base.hh:139
Addr blkAlign(Addr addr) const
Align an address to the block size.
Definition: base.hh:196
BaseTagsParams Params
Definition: base.hh:151
A Basic Cache block.
Definition: blk.hh:79
virtual CacheBlk * findVictim(Addr addr)=0
unsigned numBlocks
the number of blocks in the cache
Definition: base.hh:94
virtual void setWayAllocationMax(int ways)
Limit the allocation for the cache ways.
Definition: base.hh:223
virtual int extractSet(Addr addr) const =0
BaseTagsDumpCallback(BaseTags *t)
Definition: base.hh:267
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
ClockedObject declaration and implementation.
Stats::Scalar tagAccesses
Number of tags consulted over all accesses.
Definition: base.hh:142
A basic cache interface.
Definition: base.hh:79
const Cycles accessLatency
The total access latency of the cache.
Definition: base.hh:81
Stats::Scalar warmupCycle
The cycle that the warmup percentage was hit.
Definition: base.hh:124
Stats::Formula avgOccs
Average occ % of each requestor using the cache.
Definition: base.hh:130
Definitions of a simple cache block class.
const unsigned blkSize
The block size of the cache.
Definition: base.hh:69
Stats::Vector2d ageTaskId
Occupancy of each context/cpu using the cache.
Definition: base.hh:136
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
Stats::Formula avgRefs
Average number of references to a block before is was replaced.
Definition: base.hh:121
virtual std::string print() const =0
Print all tags used.
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:245
const Addr blkMask
Mask out all bits that aren't part of the block offset.
Definition: base.hh:71
BaseTags * tags
Definition: base.hh:265
Stats::Scalar dataAccesses
Number of data blocks consulted over all accesses.
Definition: base.hh:144
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2895
BaseCache * cache
Pointer to the parent cache.
Definition: base.hh:83
virtual void process()
virtual process function that is invoked when the callback queue is executed.
Definition: base.hh:268
virtual CacheBlk * findBlock(Addr addr, bool is_secure) const =0
Find a block using the memory address.
int extractBlkOffset(Addr addr) const
Calculate the block offset of an address.
Definition: base.hh:206
virtual void forEachBlk(CacheBlkVisitor &visitor)=0
BaseTags * tags
Definition: base.hh:257
A vector of Average stats.
Definition: statistics.hh:2507
virtual Addr extractTag(Addr addr) const =0
virtual Addr regenerateBlkAddr(Addr tag, unsigned set) const =0
A 2-Dimensional vecto of scalar stats.
Definition: statistics.hh:2515
Bitfield< 5 > t
Definition: miscregs.hh:1382
int warmupBound
The number of tags that need to be touched to meet the warmup percentage.
Definition: base.hh:89
Bitfield< 0 > p
A common base class of Cache tagstore objects.
Definition: base.hh:65
Base class for cache block visitor, operating on the cache block base class (later subclassed for the...
Definition: blk.hh:397
Stats::AverageVector occupancies
Average occupancy of each requestor using the cache.
Definition: base.hh:127
const unsigned size
The size of the cache.
Definition: base.hh:73

Generated on Fri Jun 9 2017 13:03:41 for gem5 by doxygen 1.8.6