From 744fb2e4b9b3cf2255d3d6b7845a13368a03df30 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Sun, 2 Apr 2017 22:25:13 -0700 Subject: [PATCH] Cut imem.resp.ready critical path with a flow queue This is only necessary for RVC, where the decode latency is much higher. --- src/main/scala/rocket/Rocket.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/scala/rocket/Rocket.scala b/src/main/scala/rocket/Rocket.scala index 1981a055..58fd77e1 100644 --- a/src/main/scala/rocket/Rocket.scala +++ b/src/main/scala/rocket/Rocket.scala @@ -4,6 +4,7 @@ package rocket import Chisel._ +import chisel3.core.withReset import config._ import tile._ import uncore.constants._ @@ -172,7 +173,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p) val ibuf = Module(new IBuf) val id_expanded_inst = ibuf.io.inst.map(_.bits.inst) val id_inst = id_expanded_inst.map(_.bits) - ibuf.io.imem <> io.imem.resp + ibuf.io.imem <> (if (usingCompressed) withReset(reset || take_pc) { Queue(io.imem.resp, 1, flow = true) } else io.imem.resp) ibuf.io.kill := take_pc require(decodeWidth == 1 /* TODO */ && retireWidth == decodeWidth)