@@ -231,6 +231,11 @@ class MuonCoreTop(implicit p: Parameters) extends LazyModule with HasCoreParamet
231231 core.io.coreId := 0 .U
232232 core.io.clusterId := 0 .U
233233
234+ // performance counters
235+ val cperf = Module (new Profiler )
236+ cperf.io.perf <> core.io.perf
237+ cperf.io.finished := core.io.finished
238+
234239 // RTL/model diff-test
235240 if (core.test) {
236241 val cdiff = Module (new CyclotronDiffTest (tick = true ))
@@ -1092,40 +1097,70 @@ class CyclotronDiffTest(tick: Boolean = true)
10921097 boxtr.address := tr.address
10931098 boxtr.data := tr.data.asUInt
10941099 }
1095- }
10961100
1097- class CyclotronDiffTestBlackBox (tick : Boolean )(implicit val p : Parameters )
1098- extends BlackBox (Map (
1099- " ARCH_LEN" -> p(MuonKey ).archLen,
1100- " INST_BITS" -> p(MuonKey ).instBits,
1101- " NUM_WARPS" -> p(MuonKey ).numWarps,
1102- " NUM_LANES" -> p(MuonKey ).numLanes,
1103- " OP_BITS" -> Isa .opcodeBits,
1104- " REG_BITS" -> Isa .regBits,
1105- " IMM_BITS" -> 32 ,
1106- " CSR_IMM_BITS" -> Isa .csrImmBits,
1107- " PRED_BITS" -> Isa .predBits,
1108- " SIM_TICK" -> (if (tick) 1 else 0 ),
1109- )) with HasBlackBoxResource with HasCoreParameters {
1110- val io = IO (new Bundle {
1111- val clock = Input (Clock ())
1112- val reset = Input (Bool ())
1101+ class CyclotronDiffTestBlackBox (tick : Boolean )(implicit val p : Parameters )
1102+ extends BlackBox (Map (
1103+ " ARCH_LEN" -> p(MuonKey ).archLen,
1104+ " INST_BITS" -> p(MuonKey ).instBits,
1105+ " NUM_WARPS" -> p(MuonKey ).numWarps,
1106+ " NUM_LANES" -> p(MuonKey ).numLanes,
1107+ " OP_BITS" -> Isa .opcodeBits,
1108+ " REG_BITS" -> Isa .regBits,
1109+ " IMM_BITS" -> 32 ,
1110+ " CSR_IMM_BITS" -> Isa .csrImmBits,
1111+ " PRED_BITS" -> Isa .predBits,
1112+ " SIM_TICK" -> (if (tick) 1 else 0 ),
1113+ )) with HasBlackBoxResource with HasCoreParameters {
1114+ val io = IO (new Bundle {
1115+ val clock = Input (Clock ())
1116+ val reset = Input (Bool ())
11131117
1114- val trace = Input (new Bundle {
1115- val valid = Bool ()
1116- val pc = pcT
1117- val warpId = widT
1118- val regs = Vec (Isa .maxNumRegs, new Bundle {
1119- val enable = Bool ()
1120- val address = pRegT
1121- val data = UInt ((muonParams.numLanes * muonParams.archLen).W )
1118+ val trace = Input (new Bundle {
1119+ val valid = Bool ()
1120+ val pc = pcT
1121+ val warpId = widT
1122+ val regs = Vec (Isa .maxNumRegs, new Bundle {
1123+ val enable = Bool ()
1124+ val address = pRegT
1125+ val data = UInt ((muonParams.numLanes * muonParams.archLen).W )
1126+ })
11221127 })
11231128 })
1129+
1130+ addResource(" /vsrc/CyclotronDiffTest.v" )
1131+ addResource(" /vsrc/Cyclotron.vh" )
1132+ addResource(" /csrc/Cyclotron.cc" )
1133+ }
1134+ }
1135+
1136+ class Profiler (implicit p : Parameters ) extends CoreModule {
1137+ val io = IO (new Bundle {
1138+ val finished = Input (Bool ())
1139+ val perf = Flipped (new PerfIO )
11241140 })
11251141
1126- addResource(" /vsrc/CyclotronDiffTest.v" )
1127- addResource(" /vsrc/Cyclotron.vh" )
1128- addResource(" /csrc/Cyclotron.cc" )
1142+ val bbox = Module (new ProfilerBlackBox ()(p))
1143+ bbox.io.clock := clock
1144+ bbox.io.reset := reset.asBool
1145+
1146+ bbox.io.perf <> io.perf
1147+ bbox.io.finished := io.finished
1148+
1149+ class ProfilerBlackBox ()(implicit val p : Parameters )
1150+ extends BlackBox (Map (
1151+ " COUNTER_WIDTH" -> Perf .counterWidth,
1152+ )) with HasBlackBoxResource with HasCoreParameters {
1153+ val io = IO (new Bundle {
1154+ val clock = Input (Clock ())
1155+ val reset = Input (Bool ())
1156+ val finished = Input (Bool ())
1157+ val perf = Flipped (new PerfIO )
1158+ })
1159+
1160+ addResource(" /vsrc/Profiler.v" )
1161+ addResource(" /vsrc/Cyclotron.vh" )
1162+ addResource(" /csrc/Cyclotron.cc" )
1163+ }
11291164}
11301165
11311166class CyclotronMemBlackBox (implicit p : Parameters ) extends CyclotronBlackBox
0 commit comments