From a98cb32343810994737e60446c7b0c5d975a6f37 Mon Sep 17 00:00:00 2001 From: Hansung Kim Date: Mon, 21 Oct 2024 21:56:36 -0700 Subject: [PATCH] tensor: Inject stalls to A ram for fuzzing --- .../radiance/core/TensorCoreDecoupled.scala | 26 +++++++++++++++++-- .../scala/radiance/memory/Coalescing.scala | 3 ++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/scala/radiance/core/TensorCoreDecoupled.scala b/src/main/scala/radiance/core/TensorCoreDecoupled.scala index cd3bfa4..c53ab81 100644 --- a/src/main/scala/radiance/core/TensorCoreDecoupled.scala +++ b/src/main/scala/radiance/core/TensorCoreDecoupled.scala @@ -216,7 +216,7 @@ class TensorCoreDecoupled( // FIXME: bogus base address val addressA = addressGen(0.U, tagA.set, tagA.index) - val addressB = addressGen(0.U, tagB.set, tagB.index) + val addressB = addressGen(0x400.U, tagB.set, tagB.index) val lastReqA = (tagA.set === lastSet.U) && (tagA.index === lastIndex.U) val lastReqB = (tagB.set === lastSet.U) && (tagB.index === lastIndex.U) @@ -672,14 +672,36 @@ class TensorCoreDecoupledTwoTLRAM(implicit p: Parameters) extends LazyModule { beatBytes = 32 // @cleanup: hardcoded )) + val stutter = new TLIdentityNode xbar.node :=* tensor.node - ramA.node := xbar.node + ramA.node := stutter := xbar.node ramB.node := xbar.node + val fuzz = true + lazy val module = new Impl class Impl extends LazyModuleImp(this) with UnitTestModule { tensor.module.io.start := io.start io.finished := tensor.module.io.finished + + val (tlIn, _) = stutter.in(0) + val (tlOut, _) = stutter.out(0) + require(stutter.in.length == 1) + require(stutter.out.length == 1) + + // inject stalls for fuzzing + val incr = Wire(Bool()) + val (count, _) = Counter(incr, 0x1000) + def cond(x: UInt) = (x & ((1 << 3) - 1).U) =/= 0.U + val stall = if (fuzz) cond(count) else false.B + + tlOut.a <> tlIn.a + tlIn.d <> tlOut.d + incr := tlIn.a.fire || stall + when (stall) { + tlIn.a.ready := false.B + tlOut.a.valid := false.B + } } } diff --git a/src/main/scala/radiance/memory/Coalescing.scala b/src/main/scala/radiance/memory/Coalescing.scala index cac5e95..a21daee 100644 --- a/src/main/scala/radiance/memory/Coalescing.scala +++ b/src/main/scala/radiance/memory/Coalescing.scala @@ -372,7 +372,8 @@ class SourceGenerator[T <: Data]( outstanding := outstanding + 1.U } }.elsewhen(io.reclaim.valid) { - assert(outstanding > 0.U) + assert(outstanding > 0.U, + "Over-reclaim. Did some responses get dropped?") outstanding := outstanding - 1.U } dontTouch(outstanding)