gem5
v20.1.0.0
mem
ruby
structures
BankedArray.hh
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012 Advanced Micro Devices, Inc.
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
* Author: Brad Beckmann
29
*
30
*/
31
32
#ifndef __MEM_RUBY_STRUCTURES_BANKEDARRAY_HH__
33
#define __MEM_RUBY_STRUCTURES_BANKEDARRAY_HH__
34
35
#include <vector>
36
37
#include "
mem/ruby/common/TypeDefines.hh
"
38
#include "
mem/ruby/system/RubySystem.hh
"
39
#include "
sim/core.hh
"
40
41
class
BankedArray
42
{
43
private
:
44
unsigned
int
banks
;
45
Cycles
accessLatency
;
46
unsigned
int
bankBits
;
47
unsigned
int
startIndexBit
;
48
RubySystem
*
m_ruby_system
;
49
50
class
AccessRecord
51
{
52
public
:
53
AccessRecord
() :
idx
(0),
startAccess
(0),
endAccess
(0) {}
54
int64_t
idx
;
55
Tick
startAccess
;
56
Tick
endAccess
;
57
};
58
59
// If the tick event is scheduled then the bank is busy
60
// otherwise, schedule the event and wait for it to complete
61
std::vector<AccessRecord>
busyBanks
;
62
63
unsigned
int
mapIndexToBank
(int64_t idx);
64
65
public
:
66
BankedArray
(
unsigned
int
banks
,
Cycles
accessLatency
,
67
unsigned
int
startIndexBit
,
RubySystem
*
rs
);
68
69
// Note: We try the access based on the cache index, not the address
70
// This is so we don't get aliasing on blocks being replaced
71
bool
tryAccess
(int64_t idx);
72
73
void
reserve
(int64_t idx);
74
75
Cycles
getLatency
()
const
{
return
accessLatency
; }
76
};
77
78
#endif
BankedArray::busyBanks
std::vector< AccessRecord > busyBanks
Definition:
BankedArray.hh:61
BankedArray::AccessRecord
Definition:
BankedArray.hh:50
BankedArray::getLatency
Cycles getLatency() const
Definition:
BankedArray.hh:75
Tick
uint64_t Tick
Tick count type.
Definition:
types.hh:63
std::vector
STL vector class.
Definition:
stl.hh:37
BankedArray::tryAccess
bool tryAccess(int64_t idx)
Definition:
BankedArray.cc:53
BankedArray::bankBits
unsigned int bankBits
Definition:
BankedArray.hh:46
BankedArray::AccessRecord::AccessRecord
AccessRecord()
Definition:
BankedArray.hh:53
BankedArray::AccessRecord::startAccess
Tick startAccess
Definition:
BankedArray.hh:55
BankedArray
Definition:
BankedArray.hh:41
BankedArray::banks
unsigned int banks
Definition:
BankedArray.hh:44
BankedArray::AccessRecord::idx
int64_t idx
Definition:
BankedArray.hh:54
BankedArray::startIndexBit
unsigned int startIndexBit
Definition:
BankedArray.hh:47
RubySystem
Definition:
RubySystem.hh:52
TypeDefines.hh
RubySystem.hh
core.hh
BankedArray::m_ruby_system
RubySystem * m_ruby_system
Definition:
BankedArray.hh:48
BankedArray::BankedArray
BankedArray(unsigned int banks, Cycles accessLatency, unsigned int startIndexBit, RubySystem *rs)
Definition:
BankedArray.cc:37
ArmISA::rs
Bitfield< 9, 8 > rs
Definition:
miscregs_types.hh:372
Cycles
Cycles is a wrapper class for representing cycle counts, i.e.
Definition:
types.hh:83
BankedArray::AccessRecord::endAccess
Tick endAccess
Definition:
BankedArray.hh:56
BankedArray::reserve
void reserve(int64_t idx)
Definition:
BankedArray.cc:69
BankedArray::mapIndexToBank
unsigned int mapIndexToBank(int64_t idx)
Definition:
BankedArray.cc:95
BankedArray::accessLatency
Cycles accessLatency
Definition:
BankedArray.hh:45
Generated on Wed Sep 30 2020 14:02:13 for gem5 by
doxygen
1.8.17