Param: Transition to Cycles for relevant parameters
This patch is a first step to using Cycles as a parameter type. The main affected modules are the CPUs and the Ruby caches. There are definitely plenty more places that are affected, but this patch serves as a starting point to making the transition. An important part of this patch is to actually enable parameters to be specified as Param.Cycles which involves some changes to params.py.
This commit is contained in:
@@ -49,7 +49,7 @@ class BaseBus(MemObject):
|
||||
master = VectorMasterPort("vector port for connecting slaves")
|
||||
# Override the default clock
|
||||
clock = '1GHz'
|
||||
header_cycles = Param.Int(1, "cycles of overhead per transaction")
|
||||
header_cycles = Param.Cycles(1, "cycles of overhead per transaction")
|
||||
width = Param.Int(8, "bus width (bytes)")
|
||||
block_size = Param.Int(64, "The default block size if not set by " \
|
||||
"any connected module")
|
||||
|
||||
2
src/mem/cache/BaseCache.py
vendored
2
src/mem/cache/BaseCache.py
vendored
@@ -37,7 +37,7 @@ class BaseCache(MemObject):
|
||||
assoc = Param.Int("associativity")
|
||||
block_size = Param.Int("block size in bytes")
|
||||
latency = Param.Latency("Latency")
|
||||
hash_delay = Param.Int(1, "time in cycles of hash access")
|
||||
hash_delay = Param.Cycles(1, "time in cycles of hash access")
|
||||
max_miss_count = Param.Counter(0,
|
||||
"number of misses to handle before calling exit")
|
||||
mshrs = Param.Int("number of MSHRs (max outstanding requests)")
|
||||
|
||||
2
src/mem/cache/tags/iic.cc
vendored
2
src/mem/cache/tags/iic.cc
vendored
@@ -250,6 +250,8 @@ IIC::accessBlock(Addr addr, int &lat, int context_src)
|
||||
}
|
||||
|
||||
}
|
||||
// @todo: is hashDelay is really cycles, then
|
||||
// multiply with period
|
||||
set_lat = set_lat * hashDelay + hitLatency;
|
||||
if (tag_ptr != NULL) {
|
||||
// IIC replacement: if this is not the first element of
|
||||
|
||||
2
src/mem/cache/tags/iic.hh
vendored
2
src/mem/cache/tags/iic.hh
vendored
@@ -196,7 +196,7 @@ class IIC : public BaseTags
|
||||
const unsigned subMask;
|
||||
|
||||
/** The latency of a hash lookup. */
|
||||
const unsigned hashDelay;
|
||||
const Cycles hashDelay;
|
||||
/** The total number of tags in primary and secondary. */
|
||||
const unsigned numTags;
|
||||
/** The number of tags in the secondary tag store. */
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "mem/ruby/system/BankedArray.hh"
|
||||
#include "sim/eventq.hh"
|
||||
|
||||
BankedArray::BankedArray(unsigned int banks, unsigned int accessLatency, unsigned int startIndexBit) :
|
||||
BankedArray::BankedArray(unsigned int banks, Cycles accessLatency, unsigned int startIndexBit) :
|
||||
EventManager(&mainEventQueue)
|
||||
{
|
||||
this->banks = banks;
|
||||
|
||||
@@ -43,7 +43,7 @@ class BankedArray : public EventManager
|
||||
{
|
||||
private:
|
||||
unsigned int banks;
|
||||
unsigned int accessLatency;
|
||||
Cycles accessLatency;
|
||||
unsigned int bankBits;
|
||||
unsigned int startIndexBit;
|
||||
|
||||
@@ -66,7 +66,7 @@ private:
|
||||
unsigned int mapIndexToBank(Index idx);
|
||||
|
||||
public:
|
||||
BankedArray(unsigned int banks, unsigned int accessLatency, unsigned int startIndexBit);
|
||||
BankedArray(unsigned int banks, Cycles accessLatency, unsigned int startIndexBit);
|
||||
|
||||
// Note: We try the access based on the cache index, not the address
|
||||
// This is so we don't get aliasing on blocks being replaced
|
||||
|
||||
@@ -43,6 +43,6 @@ class RubyCache(SimObject):
|
||||
|
||||
dataArrayBanks = Param.Int(1, "Number of banks for the data array")
|
||||
tagArrayBanks = Param.Int(1, "Number of banks for the tag array")
|
||||
dataAccessLatency = Param.Int(1, "Gem5 cycles for the data array")
|
||||
tagAccessLatency = Param.Int(1, "Gem5 cycles for the tag array")
|
||||
dataAccessLatency = Param.Cycles(1, "cycles for a data array access")
|
||||
tagAccessLatency = Param.Cycles(1, "cycles for a tag array access")
|
||||
resourceStalls = Param.Bool(False, "stall if there is a resource failure")
|
||||
|
||||
@@ -139,7 +139,7 @@ class Sequencer : public RubyPort
|
||||
|
||||
private:
|
||||
int m_max_outstanding_requests;
|
||||
int m_deadlock_threshold;
|
||||
Cycles m_deadlock_threshold;
|
||||
|
||||
CacheMemory* m_dataCache_ptr;
|
||||
CacheMemory* m_instCache_ptr;
|
||||
|
||||
@@ -58,7 +58,7 @@ class RubySequencer(RubyPort):
|
||||
dcache = Param.RubyCache("")
|
||||
max_outstanding_requests = Param.Int(16,
|
||||
"max requests (incl. prefetches) outstanding")
|
||||
deadlock_threshold = Param.Int(500000,
|
||||
deadlock_threshold = Param.Cycles(500000,
|
||||
"max outstanding cycles for a request before deadlock/livelock declared")
|
||||
|
||||
class DMASequencer(RubyPort):
|
||||
|
||||
Reference in New Issue
Block a user