From c4092dd0ccbfad77af352d4577f8f01dc2d8a36a Mon Sep 17 00:00:00 2001 From: Henry Cook Date: Mon, 7 Aug 2017 17:36:07 -0700 Subject: [PATCH] tilelink: improve entropy of bus delayer --- src/main/scala/tilelink/Bus.scala | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/scala/tilelink/Bus.scala b/src/main/scala/tilelink/Bus.scala index e2a63cfb..9d72ad7c 100644 --- a/src/main/scala/tilelink/Bus.scala +++ b/src/main/scala/tilelink/Bus.scala @@ -29,22 +29,30 @@ abstract class TLBusWrapper(params: TLBusParams)(implicit p: Parameters) extends require(blockBytes % beatBytes == 0) private val delayProb = p(TLBusDelayProbability) - private val delayer = if (delayProb > 0.0) Some(LazyModule(new TLDelayer(delayProb))) else None protected val xbar = LazyModule(new TLXbar) private val master_buffer = LazyModule(new TLBuffer(masterBuffering)) private val slave_buffer = LazyModule(new TLBuffer(slaveBuffering)) private val slave_frag = LazyModule(new TLFragmenter(beatBytes, blockBytes)) private val slave_ww = LazyModule(new TLWidthWidget(beatBytes)) + private val delayedNode = if (delayProb > 0.0) { + val firstDelay = LazyModule(new TLDelayer(delayProb)) + val flowDelay = LazyModule(new TLBuffer(BufferParams.flow)) + val secondDelay = LazyModule(new TLDelayer(delayProb)) + firstDelay.node :*= xbar.node + flowDelay.node :*= firstDelay.node + secondDelay.node :*= flowDelay.node + secondDelay.node + } else { + xbar.node + } + xbar.node :=* master_buffer.node - slave_buffer.node :*= delayer.map { d => - d.node :*= xbar.node - d.node - } .getOrElse { xbar.node } + slave_buffer.node :*= delayedNode slave_frag.node :*= slave_buffer.node slave_ww.node :*= slave_buffer.node - protected def outwardNode: TLOutwardNode = delayer.map(_.node).getOrElse(xbar.node) + protected def outwardNode: TLOutwardNode = delayedNode protected def outwardBufNode: TLOutwardNode = slave_buffer.node protected def outwardFragNode: TLOutwardNode = slave_frag.node protected def outwardWWNode: TLOutwardNode = slave_ww.node