Use PseudoLRU in BTB when possible (for powers of two)
This commit is contained in:
parent
266a2f24bd
commit
88440ebf89
@ -7,6 +7,7 @@ import junctions._
|
||||
import cde.{Parameters, Field}
|
||||
import Util._
|
||||
import uncore.util._
|
||||
import uncore.agents.PseudoLRU
|
||||
|
||||
case object BtbKey extends Field[BtbParameters]
|
||||
|
||||
@ -180,7 +181,16 @@ class BTB(implicit p: Parameters) extends BtbModule {
|
||||
val updateHits = tagMatch(r_btb_update.bits.pc, updatePageHit)
|
||||
val updateHit = if (updatesOutOfOrder) updateHits.orR else r_btb_update.bits.prediction.valid
|
||||
val updateHitAddr = if (updatesOutOfOrder) OHToUInt(updateHits) else r_btb_update.bits.prediction.bits.entry
|
||||
val nextRepl = Counter(r_btb_update.valid && !updateHit, entries)._1
|
||||
|
||||
// we'd prefer PseudoLRU replacement, but it only works for powers of 2
|
||||
val nextRepl =
|
||||
if (!isPow2(entries)) {
|
||||
Counter(r_btb_update.valid && !updateHit, entries)._1
|
||||
} else {
|
||||
val plru = new PseudoLRU(entries)
|
||||
when (hits.orR) { plru.access(OHToUInt(hits)) }
|
||||
plru.replace
|
||||
}
|
||||
|
||||
val useUpdatePageHit = updatePageHit.orR
|
||||
val usePageHit = pageHit.orR
|
||||
|
Loading…
Reference in New Issue
Block a user