diff --git a/src/main/scala/coupledL2/CoupledL2.scala b/src/main/scala/coupledL2/CoupledL2.scala index 41b09d29..0093bbd1 100644 --- a/src/main/scala/coupledL2/CoupledL2.scala +++ b/src/main/scala/coupledL2/CoupledL2.scala @@ -245,7 +245,8 @@ class CoupledL2(implicit p: Parameters) extends LazyModule with HasCoupledL2Para node.edges.in.headOption.foreach { n => n.client.clients.zipWithIndex.foreach { case (c, i) => - println(s"\t${i} <= ${c.name}") + println(s"\t${i} <= ${c.name};" + + s"\tsourceRange: ${c.sourceId.start}~${c.sourceId.end}") } } diff --git a/src/main/scala/coupledL2/GrantBuffer.scala b/src/main/scala/coupledL2/GrantBuffer.scala index e1d94d07..b868a82e 100644 --- a/src/main/scala/coupledL2/GrantBuffer.scala +++ b/src/main/scala/coupledL2/GrantBuffer.scala @@ -296,6 +296,6 @@ class GrantBuffer(implicit p: Parameters) extends L2Module { } // pftRespQueue is about to be full, and using back pressure to block All MainPipe Entrance // which can SERIOUSLY affect performance, should consider less drastic prefetch policy - XSPerfAccumulate(cacheParams, "WARNING_pftRespQueue_about_to_full", noSpaceForSinkPft.getOrElse(false.B)) + XSPerfAccumulate(cacheParams, "WARNING_pftRespQueue_about_to_full", noSpaceForMSHRPft.getOrElse(false.B)) } } diff --git a/src/main/scala/coupledL2/SourceB.scala b/src/main/scala/coupledL2/SourceB.scala index fa90dee7..731aeacc 100644 --- a/src/main/scala/coupledL2/SourceB.scala +++ b/src/main/scala/coupledL2/SourceB.scala @@ -47,12 +47,16 @@ class SourceB(implicit p: Parameters) extends L2Module { val grantStatus = Input(Vec(grantBufInflightSize, new GrantStatus)) }) + val dcacheSourceIdStart = edgeIn.client.clients + .filter(_.supports.probe) + .map(c => c.sourceId.start.U).head + def toTLBundleB(task: SourceBReq) = { val b = Wire(new TLBundleB(edgeIn.bundle)) b.opcode := task.opcode b.param := task.param b.size := offsetBits.U - b.source := 0.U // make sure there are only 1 client + b.source := dcacheSourceIdStart b.address := Cat(task.tag, task.set, 0.U(offsetBits.W)) b.mask := Fill(beatBytes, 1.U(1.W)) b.data := Cat(task.alias.getOrElse(0.U), 0.U(1.W)) // this is the same as HuanCun