/** Which curTick() will this block be accessible */
Tick whenReady;
- /**
- * The set and way this block belongs to.
- * @todo Move this into subclasses when we fix CacheTags to use them.
- */
- int set, way;
-
/** Number of references to this block since it was brought in. */
unsigned refCount;
std::list<Lock> lockList;
public:
- CacheBlk()
+ CacheBlk() : data(nullptr)
{
invalidate();
}
}
/**
- * Pretty-print a tag, and interpret state bits to readable form
+ * Pretty-print tag, set and way, and interpret state bits to readable form
* including mapping to a MOESI state.
*
* @return string with basic state information
*/
- std::string print() const
+ virtual std::string print() const
{
/**
* state M O E S I
default: s = 'T'; break; // @TODO add other types
}
return csprintf("state: %x (%c) valid: %d writable: %d readable: %d "
- "dirty: %d tag: %x", status, s, isValid(),
- isWritable(), isReadable(), isDirty(), tag);
+ "dirty: %d | tag: %#x set: %#x way: %#x", status, s,
+ isValid(), isWritable(), isReadable(), isDirty(), tag,
+ getSet(), getWay());
}
/**
Addr _addr;
public:
- TempCacheBlk() : CacheBlk() {}
+ /**
+ * Creates a temporary cache block, with its own storage.
+ * @param size The size (in bytes) of this cache block.
+ */
+ TempCacheBlk(unsigned size) : CacheBlk()
+ {
+ data = new uint8_t[size];
+ }
TempCacheBlk(const TempCacheBlk&) = delete;
TempCacheBlk& operator=(const TempCacheBlk&) = delete;
- ~TempCacheBlk() {};
+ ~TempCacheBlk() { delete [] data; };
/**
* Invalidate the block and clear all state.
_addr = MaxAddr;
}
- /**
- * Set member variables when a block insertion occurs. A TempCacheBlk does
- * not have all the information required to regenerate the block's address,
- * so it is provided the address itself for easy regeneration.
- *
- * @param addr Block address.
- * @param is_secure Whether the block is in secure space or not.
- */
- void insert(const Addr addr, const bool is_secure)
+ void insert(const Addr addr, const bool is_secure,
+ const int src_master_ID=0, const uint32_t task_ID=0) override
{
// Set block address
_addr = addr;