From 354cb2d5ecd37fd879c706194e084bbb6cccbd3b Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Sun, 22 May 2016 14:08:53 -0700 Subject: [PATCH] Don't stall I$ response when resolving a branch misprediction This avoids a fetch bubble. Not clear if this is the best way to do it. Perhaps this change should instead be made to Frontend (i.e., ignore resp.ready when req.valid is high), but that might exacerbate a critical path. --- rocket/src/main/scala/rocket.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocket/src/main/scala/rocket.scala b/rocket/src/main/scala/rocket.scala index 6e7c85c8..af09c7ac 100644 --- a/rocket/src/main/scala/rocket.scala +++ b/rocket/src/main/scala/rocket.scala @@ -505,7 +505,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p) { mem_npc)).toUInt // mispredicted branch io.imem.flush_icache := wb_reg_valid && wb_ctrl.fence_i io.imem.flush_tlb := csr.io.fatc - io.imem.resp.ready := !ctrl_stalld || csr.io.interrupt + io.imem.resp.ready := !ctrl_stalld || csr.io.interrupt || take_pc_mem io.imem.btb_update.valid := mem_reg_valid && !mem_npc_misaligned && mem_wrong_npc && mem_cfi_taken && !take_pc_wb io.imem.btb_update.bits.isJump := mem_ctrl.jal || mem_ctrl.jalr