Skip to content

Commit

Permalink
cpu-o3: now only different set in one bank can be conflicted (#195)
Browse files Browse the repository at this point in the history
Change-Id: I65013dea1b98eb044d86003829e2cb4f25d7adb1
  • Loading branch information
tastynoob authored Oct 29, 2024
1 parent 5cda952 commit b294ded
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions src/cpu/o3/lsq.cc
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ LSQ::LSQ(CPU *cpu_ptr, IEW *iew_ptr, const BaseO3CPUParams &params)
_cacheBlocked(false),
cacheStorePorts(params.cacheStorePorts), usedStorePorts(0),
cacheLoadPorts(params.cacheLoadPorts), usedLoadPorts(0),lastConflictCheckTick(0),
recentlyloadAddr(16),
recentlyloadAddr(8),
enableBankConflictCheck(params.BankConflictCheck),
waitingForStaleTranslation(false),
staleTranslationWaitTxnId(0),
Expand Down Expand Up @@ -207,20 +207,21 @@ bool
LSQ::bankConflictedCheck(Addr vaddr)
{
bool now_bank_conflict = false;
// 64KB Dcache 8way 128sets
// [12:6] [5:3] [2:0]
// setIndex bankIndex dataOffset
const uint64_t cacheBankmask = 0b1111111111000;
if (enableBankConflictCheck) {
if (l1dBankAddresses.size() == 0) {
if (recentlyloadAddr.contains((vaddr & cacheBankmask))) {
recentlyloadAddr.get((vaddr & cacheBankmask));
return false;
}
auto bank_it = std::find(l1dBankAddresses.begin(), l1dBankAddresses.end(), bankNum(vaddr));
if (bank_it == l1dBankAddresses.end()) {
l1dBankAddresses.push_back(bankNum(vaddr));
recentlyloadAddr.insert((vaddr & cacheBankmask), {});
} else {
if (recentlyloadAddr.contains(vaddr)) {
return false;
}
auto bank_it = std::find(l1dBankAddresses.begin(), l1dBankAddresses.end(), bankNum(vaddr));
if (bank_it == l1dBankAddresses.end()) {
l1dBankAddresses.push_back(bankNum(vaddr));
recentlyloadAddr.insert(vaddr, {});
} else {
now_bank_conflict = true;
}
now_bank_conflict = true;
}
}
return now_bank_conflict;
Expand Down

0 comments on commit b294ded

Please sign in to comment.