提交 b5f5fbe6 编写于 作者: Z ZhangZifei

BPU: add temp perf counter

上级 f20e1609
...@@ -4,7 +4,7 @@ import chisel3._ ...@@ -4,7 +4,7 @@ import chisel3._
import chisel3.util._ import chisel3.util._
import xiangshan._ import xiangshan._
import xiangshan.utils._ import xiangshan.utils._
import chisel3.util.experimental.BoringUtils
class BrqPtr extends XSBundle { class BrqPtr extends XSBundle {
...@@ -221,4 +221,16 @@ class Brq extends XSModule { ...@@ -221,4 +221,16 @@ class Brq extends XSModule {
XSInfo(debug_roq_redirect, "roq redirect, flush brq\n") 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") 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
...@@ -278,5 +278,8 @@ class Roq(implicit val p: XSConfig) extends XSModule { ...@@ -278,5 +278,8 @@ class Roq(implicit val p: XSConfig) extends XSModule {
debugMonitor.io.trapPC := trapPC debugMonitor.io.trapPC := trapPC
debugMonitor.io.cycleCnt := GTimer() debugMonitor.io.cycleCnt := GTimer()
debugMonitor.io.instrCnt := instrCnt debugMonitor.io.instrCnt := instrCnt
// BPU temp Perf Cnt
BoringUtils.addSource(hitTrap, "XSTRAP_BPU")
} }
} }
...@@ -6,6 +6,8 @@ import xiangshan._ ...@@ -6,6 +6,8 @@ import xiangshan._
import xiangshan.utils._ import xiangshan.utils._
import xiangshan.backend.ALUOpType import xiangshan.backend.ALUOpType
import utils._ import utils._
import chisel3.util.experimental.BoringUtils
import xiangshan.backend.decode.XSTrap
class TableAddr(val idxBits: Int, val banks: Int) extends XSBundle { class TableAddr(val idxBits: Int, val banks: Int) extends XSBundle {
def tagBits = VAddrBits - idxBits - 2 def tagBits = VAddrBits - idxBits - 2
...@@ -543,4 +545,39 @@ class BPU extends XSModule { ...@@ -543,4 +545,39 @@ class BPU extends XSModule {
s3.io.predecode <> io.predecode s3.io.predecode <> io.predecode
io.tageOut <> s3.io.out io.tageOut <> s3.io.out
s3.io.redirectInfo <> io.redirectInfo 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
...@@ -48,7 +48,7 @@ class Ibuffer extends XSModule { ...@@ -48,7 +48,7 @@ class Ibuffer extends XSModule {
val enqValid = !io.flush && io.in.valid && !full && !ibuf_valid(tail_ptr + (FetchWidth*2).U) 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(_||_) 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 // enque
when(enqValid) { when(enqValid) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册