gem5  v19.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
skewed_associative.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 Inria
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Daniel Carvalho
29  */
30 
36 #ifndef __MEM_CACHE_INDEXING_POLICIES_SKEWED_ASSOCIATIVE_HH__
37 #define __MEM_CACHE_INDEXING_POLICIES_SKEWED_ASSOCIATIVE_HH__
38 
39 #include <vector>
40 
42 #include "params/SkewedAssociative.hh"
43 
44 class ReplaceableEntry;
45 
72 {
73  private:
80  const int NUM_SKEWING_FUNCTIONS = 8;
81 
85  const int msbShift;
86 
99  Addr hash(const Addr addr) const;
100 
108  Addr dehash(const Addr addr) const;
109 
118  Addr skew(const Addr addr, const uint32_t way) const;
119 
129  Addr deskew(const Addr addr, const uint32_t way) const;
130 
138  uint32_t extractSet(const Addr addr, const uint32_t way) const;
139 
140  public:
142  typedef SkewedAssociativeParams Params;
143 
147  SkewedAssociative(const Params *p);
148 
153 
163  override;
164 
173  Addr regenerateAddr(const Addr tag, const ReplaceableEntry* entry) const
174  override;
175 };
176 
177 #endif //__MEM_CACHE_INDEXING_POLICIES_SKEWED_ASSOCIATIVE_HH__
const int NUM_SKEWING_FUNCTIONS
The number of skewing functions implemented.
uint32_t extractSet(const Addr addr, const uint32_t way) const
Apply a skewing function to calculate address&#39; set given a way.
ip6_addr_t addr
Definition: inet.hh:335
Addr hash(const Addr addr) const
The hash function itself.
A skewed associative indexing policy.
STL vector class.
Definition: stl.hh:40
Addr regenerateAddr(const Addr tag, const ReplaceableEntry *entry) const override
Regenerate an entry&#39;s address from its tag and assigned set and way.
Addr deskew(const Addr addr, const uint32_t way) const
Address deskewing function (inverse of the skew function) of the given way.
std::vector< ReplaceableEntry * > getPossibleEntries(const Addr addr) const override
Find all possible entries for insertion and replacement of an address.
SkewedAssociative(const Params *p)
Construct and initialize this policy.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
const int msbShift
The amount to shift a set index to get its MSB.
Addr skew(const Addr addr, const uint32_t way) const
Address skewing function selection.
SkewedAssociativeParams Params
Convenience typedef.
Addr dehash(const Addr addr) const
Inverse of the hash function.
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
A common base class for indexing table locations.
Definition: base.hh:66
Bitfield< 0 > p
Declaration of a common framework for indexing policies.
~SkewedAssociative()
Destructor.

Generated on Fri Feb 28 2020 16:27:02 for gem5 by doxygen 1.8.13