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) 2013-2014 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) 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: Ron Dreslinski
41  * Mitch Hayenga
42  */
43 
49 #ifndef __MEM_CACHE_PREFETCH_BASE_HH__
50 #define __MEM_CACHE_PREFETCH_BASE_HH__
51 
52 #include "base/statistics.hh"
53 #include "mem/packet.hh"
54 #include "params/BasePrefetcher.hh"
55 #include "sim/clocked_object.hh"
56 
57 class BaseCache;
58 
60 {
61  protected:
62 
63  // PARAMETERS
64 
67 
69  unsigned blkSize;
70 
72  unsigned lBlkSize;
73 
76 
78  bool onMiss;
79 
81  bool onRead;
82 
84  bool onWrite;
85 
87  bool onData;
88 
90  bool onInst;
91 
94 
95  const Addr pageBytes;
96 
98  bool observeAccess(const PacketPtr &pkt) const;
99 
101  bool inCache(Addr addr, bool is_secure) const;
102 
104  bool inMissQueue(Addr addr, bool is_secure) const;
105 
107  bool samePage(Addr a, Addr b) const;
109  Addr blockAddress(Addr a) const;
111  Addr blockIndex(Addr a) const;
113  Addr pageAddress(Addr a) const;
115  Addr pageOffset(Addr a) const;
117  Addr pageIthBlockAddress(Addr page, uint32_t i) const;
118 
119 
121 
122  public:
123 
124  BasePrefetcher(const BasePrefetcherParams *p);
125 
126  virtual ~BasePrefetcher() {}
127 
128  void setCache(BaseCache *_cache);
129 
135  virtual Tick notify(const PacketPtr &pkt) = 0;
136 
137  virtual PacketPtr getPacket() = 0;
138 
139  virtual Tick nextPrefetchReadyTime() const = 0;
140 
141  virtual void regStats();
142 };
143 #endif //__MEM_CACHE_PREFETCH_BASE_HH__
bool onData
Consult prefetcher on data accesses?
Definition: base.hh:87
BasePrefetcher(const BasePrefetcherParams *p)
Definition: base.cc:57
bool onMiss
Only consult prefetcher on cache misses?
Definition: base.hh:78
Bitfield< 7 > i
Definition: miscregs.hh:1378
Bitfield< 8 > a
Definition: miscregs.hh:1377
ip6_addr_t addr
Definition: inet.hh:335
BaseCache * cache
Pointr to the parent cache.
Definition: base.hh:66
virtual void regStats()
Register statistics for this object.
Definition: base.cc:76
Definition: system.hh:83
virtual Tick notify(const PacketPtr &pkt)=0
Notify prefetcher of cache access (may be any access or just misses, depending on cache parameters...
unsigned lBlkSize
log_2(block size of the parent cache).
Definition: base.hh:72
Declaration of Statistics objects.
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2475
Bitfield< 7 > b
Definition: miscregs.hh:1564
bool onRead
Consult prefetcher on reads?
Definition: base.hh:81
bool observeAccess(const PacketPtr &pkt) const
Determine if this access should be observed.
Definition: base.cc:88
const Addr pageBytes
Definition: base.hh:95
virtual ~BasePrefetcher()
Definition: base.hh:126
uint64_t Tick
Tick count type.
Definition: types.hh:63
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
Addr blockAddress(Addr a) const
Determine the address of the block in which a lays.
Definition: base.cc:137
ClockedObject declaration and implementation.
bool onWrite
Consult prefetcher on reads?
Definition: base.hh:84
A basic cache interface.
Definition: base.hh:79
System * system
System we belong to.
Definition: base.hh:75
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
uint16_t MasterID
Definition: request.hh:85
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:245
MasterID masterId
Request id for prefetches.
Definition: base.hh:93
bool inMissQueue(Addr addr, bool is_secure) const
Determine if address is in cache miss queue.
Definition: base.cc:122
bool inCache(Addr addr, bool is_secure) const
Determine if address is in cache.
Definition: base.cc:113
Declaration of the Packet class.
Addr pageAddress(Addr a) const
Determine the address of the page in which a lays.
Definition: base.cc:149
void setCache(BaseCache *_cache)
Definition: base.cc:67
bool onInst
Consult prefetcher on instruction accesses?
Definition: base.hh:90
Addr pageOffset(Addr a) const
Determine the page-offset of a.
Definition: base.cc:155
Addr pageIthBlockAddress(Addr page, uint32_t i) const
Build the address of the i-th block inside the page.
Definition: base.cc:161
unsigned blkSize
The block size of the parent cache.
Definition: base.hh:69
virtual Tick nextPrefetchReadyTime() const =0
Bitfield< 0 > p
Stats::Scalar pfIssued
Definition: base.hh:120
bool samePage(Addr a, Addr b) const
Determine if addresses are on the same page.
Definition: base.cc:131
virtual PacketPtr getPacket()=0
Addr blockIndex(Addr a) const
Determine the address of a at block granularity.
Definition: base.cc:143

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