From b5f5fbe65aa24ddf52ae58a99625c6f67fba9fdf Mon Sep 17 00:00:00 2001 From: ZhangZifei <1773908404@qq.com> Date: Sun, 12 Jul 2020 20:29:42 +0800 Subject: [PATCH] BPU: add temp perf counter --- .../scala/xiangshan/backend/brq/Brq.scala | 14 ++++++- .../scala/xiangshan/backend/roq/Roq.scala | 3 ++ src/main/scala/xiangshan/frontend/BPU.scala | 37 +++++++++++++++++++ .../scala/xiangshan/frontend/Ibuffer.scala | 2 +- 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/main/scala/xiangshan/backend/brq/Brq.scala b/src/main/scala/xiangshan/backend/brq/Brq.scala index 45f3010b4..d3bb1f851 100644 --- a/src/main/scala/xiangshan/backend/brq/Brq.scala +++ b/src/main/scala/xiangshan/backend/brq/Brq.scala @@ -4,7 +4,7 @@ import chisel3._ import chisel3.util._ import xiangshan._ import xiangshan.utils._ - +import chisel3.util.experimental.BoringUtils class BrqPtr extends XSBundle { @@ -221,4 +221,16 @@ class Brq extends XSModule { XSInfo(debug_roq_redirect, "roq redirect, flush brq\n") XSInfo(debug_brq_redirect, p"brq redirect, target:${Hexadecimal(io.redirect.bits.target)} flptr:${io.redirect.bits.freelistAllocPtr}\n") + + BoringUtils.addSource(io.out.fire(), "MbpInstr") + BoringUtils.addSource(io.out.fire() && !commitEntry.misPred, "MbpRight") + BoringUtils.addSource(io.out.fire() && commitEntry.misPred, "MbpWrong") + BoringUtils.addSource(io.out.fire() && !commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.B, "MbpBRight") + BoringUtils.addSource(io.out.fire() && commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.B, "MbpBWrong") + BoringUtils.addSource(io.out.fire() && !commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.J, "MbpJRight") + BoringUtils.addSource(io.out.fire() && commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.J, "MbpJWrong") + BoringUtils.addSource(io.out.fire() && !commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.I, "MbpIRight") + BoringUtils.addSource(io.out.fire() && commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.I, "MbpIWrong") + BoringUtils.addSource(io.out.fire() && !commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.R, "MbpRRight") + BoringUtils.addSource(io.out.fire() && commitEntry.misPred && commitEntry.exuOut.redirect._type===BTBtype.R, "MbpRWrong") } \ No newline at end of file diff --git a/src/main/scala/xiangshan/backend/roq/Roq.scala b/src/main/scala/xiangshan/backend/roq/Roq.scala index 21ba1d47d..06c6585d6 100644 --- a/src/main/scala/xiangshan/backend/roq/Roq.scala +++ b/src/main/scala/xiangshan/backend/roq/Roq.scala @@ -278,5 +278,8 @@ class Roq(implicit val p: XSConfig) extends XSModule { debugMonitor.io.trapPC := trapPC debugMonitor.io.cycleCnt := GTimer() debugMonitor.io.instrCnt := instrCnt + + // BPU temp Perf Cnt + BoringUtils.addSource(hitTrap, "XSTRAP_BPU") } } diff --git a/src/main/scala/xiangshan/frontend/BPU.scala b/src/main/scala/xiangshan/frontend/BPU.scala index 768600a6a..5d6681a1d 100644 --- a/src/main/scala/xiangshan/frontend/BPU.scala +++ b/src/main/scala/xiangshan/frontend/BPU.scala @@ -6,6 +6,8 @@ import xiangshan._ import xiangshan.utils._ import xiangshan.backend.ALUOpType import utils._ +import chisel3.util.experimental.BoringUtils +import xiangshan.backend.decode.XSTrap class TableAddr(val idxBits: Int, val banks: Int) extends XSBundle { def tagBits = VAddrBits - idxBits - 2 @@ -543,4 +545,39 @@ class BPU extends XSModule { s3.io.predecode <> io.predecode io.tageOut <> s3.io.out s3.io.redirectInfo <> io.redirectInfo + + // TODO: temp and ugly code, when perf counters is added( may after adding CSR), please mv the below counter + val bpuPerfCntList = List( + "MbpInstr", + "MbpRight", + "MbpWrong", + "MbpBRight", + "MbpBWrong", + "MbpJRight", + "MbpJWrong", + "MbpIRight", + "MbpIWrong", + "MbpRRight", + "MbpRWrong" + ) + + val bpuPerfCnts = List.fill(bpuPerfCntList.length)(RegInit(0.U(XLEN.W))) + val bpuPerfCntConds = List.fill(bpuPerfCntList.length)(WireInit(false.B)) + (bpuPerfCnts zip bpuPerfCntConds) map { case (cnt, cond) => { when (cond) { cnt := cnt + 1.U }}} + + for(i <- bpuPerfCntList.indices) { + BoringUtils.addSink(bpuPerfCntConds(i), bpuPerfCntList(i)) + } + + val xsTrap = WireInit(false.B) + BoringUtils.addSink(xsTrap, "XSTRAP_BPU") + + // if (!p.FPGAPlatform) { + when (xsTrap) { + printf("=================BPU's PerfCnt================\n") + for(i <- bpuPerfCntList.indices) { + printf(bpuPerfCntList(i) + " <- " + "%d\n", bpuPerfCnts(i)) + } + } + // } } \ No newline at end of file diff --git a/src/main/scala/xiangshan/frontend/Ibuffer.scala b/src/main/scala/xiangshan/frontend/Ibuffer.scala index f73380fcf..8ba58d26e 100644 --- a/src/main/scala/xiangshan/frontend/Ibuffer.scala +++ b/src/main/scala/xiangshan/frontend/Ibuffer.scala @@ -48,7 +48,7 @@ class Ibuffer extends XSModule { val enqValid = !io.flush && io.in.valid && !full && !ibuf_valid(tail_ptr + (FetchWidth*2).U) val deqValid = !io.flush && !empty //&& io.out.map(_.ready).reduce(_||_) - io.in.ready := enqValid + io.in.ready := !full && !ibuf_valid(tail_ptr + (FetchWidth*2).U) // enque when(enqValid) { -- GitLab