Fix L2 TLB perfctr
It was counting conflict misses but not cold misses.
This commit is contained in:
parent
df7f09b9ce
commit
8d97684555
@ -176,17 +176,19 @@ class PTW(n: Int)(implicit edge: TLEdgeOut, p: Parameters) extends CoreModule()(
|
|||||||
|
|
||||||
val s0_valid = !l2_refill && arb.io.out.fire()
|
val s0_valid = !l2_refill && arb.io.out.fire()
|
||||||
val s1_valid = RegNext(s0_valid)
|
val s1_valid = RegNext(s0_valid)
|
||||||
val s2_valid = RegNext(s1_valid && valid(r_idx))
|
val s2_valid = RegNext(s1_valid)
|
||||||
val s1_rdata = ram.read(arb.io.out.bits.addr(idxBits-1, 0), s0_valid)
|
val s1_rdata = ram.read(arb.io.out.bits.addr(idxBits-1, 0), s0_valid)
|
||||||
val s2_rdata = code.decode(RegEnable(s1_rdata, s1_valid))
|
val s2_rdata = code.decode(RegEnable(s1_rdata, s1_valid))
|
||||||
when (s2_valid && s2_rdata.error) { valid := 0.U }
|
val s2_valid_bit = RegEnable(valid(r_idx), s1_valid)
|
||||||
|
val s2_g = RegEnable(g(r_idx), s1_valid)
|
||||||
|
when (s2_valid && s2_valid_bit && s2_rdata.error) { valid := 0.U }
|
||||||
|
|
||||||
val s2_entry = s2_rdata.uncorrected.asTypeOf(new Entry)
|
val s2_entry = s2_rdata.uncorrected.asTypeOf(new Entry)
|
||||||
val s2_hit = s2_valid && !s2_rdata.error && r_tag === s2_entry.tag
|
val s2_hit = s2_valid && s2_valid_bit && !s2_rdata.error && r_tag === s2_entry.tag
|
||||||
io.dpath.perf.l2miss := s2_valid && !(r_tag === s2_entry.tag)
|
io.dpath.perf.l2miss := s2_valid && !(s2_valid_bit && r_tag === s2_entry.tag)
|
||||||
val s2_pte = Wire(new PTE)
|
val s2_pte = Wire(new PTE)
|
||||||
s2_pte := s2_entry
|
s2_pte := s2_entry
|
||||||
s2_pte.g := g(r_idx)
|
s2_pte.g := s2_g
|
||||||
s2_pte.v := true
|
s2_pte.v := true
|
||||||
|
|
||||||
(s2_hit, s2_pte)
|
(s2_hit, s2_pte)
|
||||||
|
Loading…
Reference in New Issue
Block a user