This commit is contained in:
LYC 2024-10-30 17:57:29 +08:00
parent 219211ddee
commit c03fafcf95
4 changed files with 32 additions and 33 deletions

View File

@ -46,7 +46,7 @@ int CacheConfig::log2(uint32_t x)
uint32_t CacheConfig::getMaxIndex()
{
return (1 << i);
return (1 << index);
}
uint32_t CacheConfig::getVictimAs()
@ -61,50 +61,50 @@ uint32_t CacheConfig::getAs()
void CacheConfig::setupTIO()
{
// setup t, i, b
// setup tag, index, b
o = log2(blockSize);
i = log2(s / (blockSize * assoc));
t = 32 - o - i;
index = log2(s / (blockSize * assoc));
tag = 32 - o - index;
om = (1 << o) - 1;
im = ((1 << i) - 1) << o;
offsetMask = (1 << o) - 1;
indexMask = ((1 << index) - 1) << o;
if (!victimSize)
return;
vo = log2(blockSize);
vi = 0;
vt = 32 - vo - vi;
victimOffset = log2(blockSize);
victimIndex = 0;
victimTag = 32 - victimOffset - victimIndex;
victimAsso = victimSize / blockSize;
vom = (1 << vo) - 1;
// vim = ((1<<vi)-1) << vo;
vom = (1 << victimOffset) - 1;
// vim = ((1<<victimIndex)-1) << victimOffset;
}
CacheIndex CacheConfig::parserVictimAddr(uint32_t addr)
{
uint32_t offset = addr & vom;
// uint32_t index = (addr & vim) >> vo;
uint32_t tag = addr >> vo;
// uint32_t index = (addr & vim) >> victimOffset;
uint32_t tag = addr >> victimOffset;
return {tag, 0, offset, addr};
}
CacheIndex CacheConfig::AddrParser(uint32_t addr)
{
uint32_t offset = addr & om;
uint32_t index = (addr & im) >> o;
uint32_t tag = addr >> (o + i);
uint32_t offset = addr & offsetMask;
uint32_t index = (addr & indexMask) >> o;
uint32_t tag = addr >> (o + this->index);
return {tag, index, offset, addr};
}
uint32_t CacheConfig::UnParser(uint32_t tag, CacheIndex tio)
{
return (tag << (o + i)) | (tio.index << o) | (tio.offset);
return (tag << (o + index)) | (tio.index << o) | (tio.offset);
}
uint32_t CacheConfig::UnParserVic(uint32_t tag, CacheIndex tio)
{
return (tag << (vo)) | (tio.offset);
return (tag << (victimOffset)) | (tio.offset);
}
Cache::Cache(CacheConfig* config, Cache* nextCache)

View File

@ -18,25 +18,25 @@ class CacheConfig
public:
string level;
int blockSize; // Block Size
int s; // Size
int assoc; // Assoc
int replicementPolicy; // Replicement Policy
int writePolicy; // Write Policy: 1 -> WTNA, 0 ->
int blockSize;
int s; // Size
int assoc; // Assoc
int replicementPolicy;
int writePolicy;
int victimSize; // Victim Size
int victimAsso; // Victim Asso
int victimSize;
int victimAsso;
int t; // tag bit
int i; // index
int tag; // tag bit
int index; // index
int o; // offset
uint32_t om; // offset mask
uint32_t im; // index mask
uint32_t offsetMask;
uint32_t indexMask;
int vt; // victim tag bit
int vi; // victim index
int vo; // victim offset
int victimTag;
int victimIndex;
int victimOffset;
uint32_t vom; // victim offset mask
uint32_t vim; // victim index mask
@ -88,7 +88,6 @@ public:
int writeBack = 0;
int exchange = 0;
int getCommunication();
double getMR();
double getMR2();

Binary file not shown.

Binary file not shown.